繁体   English   中英

填写清单的最佳方式是什么<string> ?</string>

[英]What's the best way to fiil list <string>?

我有一个方法,它的输入是一个文件地址列表,我想打开这些文件并处理它。 此地址包含文件扩展名。 我确定我有 3 个文件扩展名(txt、xlsx、xls)

在代码 pathWithFilesName 中,它输入带有文件路径的列表;

然后我想将它们发送到将打开并处理它们的方法

        pathWithFilesName.Add("ds.xlsx");
        pathWithFilesName.Add("ds.txt");
        var listExcel=new List<string>();
        var listTxt= new List<string>();
        var validExcelFileTypes = new List<string>{ ".xls", ".xlsx" };

        foreach (var path in pathWithFilesName)
        {
            foreach (var valid in validExcelFileTypes)
            {
                if (path.EndsWith(valid))
                {
                    listExcel.Add(path);
                }
                else
                {
                    listTxt.Add(path);
                }
            }
        }

这个变体根本不是最优的,但可以工作)我知道如何在链接上获取 excel 文件

var list= (from path in pathWithFilesName from valid in validExcelFileTypes where path.EndsWith(valid) select path).ToList();

但是通过这种方法,我需要比较 2 个列表。 例如某种相交

制作样品的最佳方法是什么?

这是使用 LinQ 和 lambda 的变体。 它不应该更有效率,而不是更好或更坏。 它可能更具可读性。

listExcel可以这样找到:

var listExcel = pathWithFilesName.Where(path=>validExcelFileTypes.Any(ext=> path.EndsWith(ext)));

如果您需要两个列表在一个 go 中。 您可以在相同条件下对源进行分组:

var listGrp = pathWithFilesName.GroupBy(path=>validExcelFileTypes.Any(ext=> path.EndsWith(ext)));

您可以使用 MoreLinQ Partition :“通过谓词对序列进行分区,.. ”。

var (listExcel, listTxt) = pathWithFilesName
                                  .Partition(p => 
                                      validExcelFileTypes.Any(ext => p.EndsWith(ext)) 
                                  );

在引擎盖下它只是一个GroupBy 源代码 展开为命名元组。

现场演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM