gpt4 book ai didi

c# - Linq 匹配数组列表?

转载 作者:行者123 更新时间:2023-11-30 21:16:15 25 4
gpt4 key购买 nike

我有一个 List<string>和一个 FileInfo[] .我需要知道 FileInfo[] 的全部内容在List<string> .最符合 LINQy 且最无错误的方法是什么?

我正在这样做,根据此处的响应,它返回 false 但是,我希望它返回 true:

        // I want to know if all of these files are in the directory
List<string> allFilesWanted = new List<string>();
allFilesWanted.Add( "a1.txt" );
allFilesWanted.Add( "a2.txt" );

// Simulate a list of files obtained from the directory
FileInfo[] someFiles = new FileInfo[3];
someFiles[0] = new FileInfo("a1.txt");
someFiles[1] = new FileInfo( "a2.txt" );
someFiles[2] = new FileInfo( "notinlist.txt" );

// This returns "false" when I would expect it to return "true"
bool all = someFiles.All( fi => allFilesWanted.Contains<string>( fi.Name ) );

谢谢。

最佳答案

更新后的问题:

var filenames=HashSet<string>(list);
fileInfoArray.All(fi=>filenames.Contains(fi.Name));

您可能需要将 Name 替换为 FullName,具体取决于您的 HashSet 包含的内容。

还有区分大小写的问题。您可以在创建哈希集时提供自定义相等比较器以实现不区分大小写的比较(例如 StringComparer.InvariantCultureIgnoreCase)。问题是您不知道文件名是否区分大小写。这取决于使用的文件系统。即使您知道它不区分大小写,用于不区分大小写比较的语言环境也会有所不同。


或仅使用 Linq:

!fileInfoArray.Select(fi=>fi.Name).Except(list).Any();

Except 在内部使用了一个 HashSet,所以这是 O(n)

关于c# - Linq 匹配数组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5302825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com