我正在尝试以下解决方案(我正在考虑使用Linq):
我需要从ftp服务器上具有相似文件名的较大文件列表中拉出某些文件。例如,我们将订单文件发送给某公司进行处理,然后他们返回可以下载的响应文件。
因此,我可以向他们发送文件“ order_123.txt”和“ order_456.txt”。在一定时间后,我需要查找并下载将被命名为“ order_123.resp”和“ order_456.resp”的那些文件的响应。更重要的是,在某些情况下,我可以有多个响应,在这种情况下,它们会创建“ order_123-1.resp”和“ order_123-2.resp”,并且文件也不会从服务器中删除。
我知道可以通过遍历文件来实现这一点,我知道我需要响应然后遍历服务器上的所有文件,直到找到匹配的文件为止,但我希望不必遍历服务器上的文件。服务器不止一次。
此示例可能有助于阐明:
我已经发送了“ order_222.txt”和“ order_333.txt”,它们已经处理了它们,并且ftp服务器包含:
“ order_111-1.resp”
“ order_001.resp”
“ order_222-1.resp”
“ order_222-2.resp”
“ order_333.resp”
我需要下载第3,第4和第5个文件。
谢谢。
最佳答案
这是一种实现方法:
string[] requests = { "order_222.txt", "order_333.txt" };
string[] responses = {
"order_111-1.resp",
"order_001.resp",
"order_222-1.resp",
"order_222-2.resp",
"order_333.resp"
};
Regex regex = new Regex(@"(-\d+)?\.resp$");
IEnumerable<string> toDownload =
responses.Where(x => requests.Contains(regex.Replace(x, ".txt")));
foreach (string filename in toDownload)
Console.WriteLine(filename);
输出:
order_222-1.resp
order_222-2.resp
order_333.resp
每次都在请求数组中使用线性查找。这可以通过使用哈希查找(字典,HashSet等)来改进。
关于c# - 内部加入2个数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2466055/