优化2循环

时间:2019-05-06 21:17:40

标签: c# optimization

试图优化这两个for循环... GetFileList(字符串,字符串) 输入参数 1. adlsPath = ADLS路径 2. Prefix =前缀字符串(逗号分隔)

public List<string> GetFileList(string adlsPath, string prefix)
{
    List<string> fileList = new List<string>();
    List<string> prefixList = prefix.Split(',').ToList();

    if (adlsClient.CheckExists(adlsPath))
    {
        Console.WriteLine($"{DateTime.Now.ToString()} - Getting the files in path: {adlsPath}");
        foreach (DirectoryEntry file in adlsClient.EnumerateDirectory(adlsPath))
        {
            if (file.Type == DirectoryEntryType.FILE)
            {
                foreach (string prefixStr in prefixList)
                {
                    if (file.Name.StartsWith(prefixStr))
                    {
                        Console.WriteLine($"{DateTime.Now.ToString()} - {file.FullName}");
                        fileList.Add(file.Name);
                    }
                }
            }
        }
    }
    else
    {
        Console.WriteLine($"{DateTime.Now.ToString()} - The path was not found: {adlsPath}");
        return fileList;
    }
    return fileList;
}

====================================

我已经更改了如下的for循环

foreach (string prefixStr in prefixList)
                {
                    IEnumerable<DirectoryEntry> tempFile = adlsClient.EnumerateDirectory(adlsPath).Where(f => f.Name.StartsWith(prefixStr) && f.Type == DirectoryEntryType.FILE);

                    foreach (DirectoryEntry file in tempFile)
                    {
                        Console.WriteLine("adding file : {0}", file.Name);
                        fileList.Add(file.Name);
                    }
                }

但仍在寻找其他好方法

2 个答案:

答案 0 :(得分:0)

可以更改第二个循环。取而代之的是,您可以使用前缀字典来检查数组。这样可以减少查找时间。

答案 1 :(得分:0)

不确定“优化”是什么意思,但是如果您不介意摆脱Console.WriteLine行,则可以将方法减少为两行(略有不同的是,下面的代码返回一个如果prefixnull,则为空列表,这与引发异常的原始方法不同;如果DirectoryEntryType.FILE为{,则可以将其修改为返回所有prefix类型{1}},具体取决于所需的行为):

null