我正在尝试以下解决方案(我正在考虑使用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/

10-11 12:15