gpt4 book ai didi

c# - 通过单独的函数将列表中的项目相互比较

转载 作者:行者123 更新时间:2023-11-30 21:19:48 26 4
gpt4 key购买 nike

我有一个函数可以检查一个字符串是否表示另一个字符串下的文件系统位置。然而,我的问题应该适用于任何返回 bool 值的函数。

无论如何,这是函数......

private bool IsItemBelowPath(string item, string path)
{

if (path == Path.GetPathRoot(path))
{
path = path.TrimEnd('\\');
}

if (item.Length < path.Length + 2)
return false;

return (string.Compare(item, 0, path, 0, path.Length, StringComparison.OrdinalIgnoreCase) == 0 &&
item[path.Length] == Path.DirectorySeparatorChar);

}

我有一个列表,其中包含我喜欢过滤的文件和文件夹路径(具有上述功能),因此不会出现嵌套。

这些路径

  • C:\路径
  • C:\路径\子路径
  • C:\Path\File.txt
  • D:\
  • D:\路径
  • D:\File.txt

应该变成

  • C:\路径
  • D:\

我需要将所有路径与所有其他路径进行比较并返回正确的路径。

我对开发很陌生,但怀疑使用上面的函数的 LINQ 语句可以完成此操作,我尝试了以下但它给出了错误的结果

var items = new List<string> { my paths.... } 

return (from i1 in items
from i2 in items
where !IsItemBelowPath(i1, i2)
select i2).Distinct().ToList();

感谢您的帮助。

最佳答案

另一种更易于阅读、性能更好并给出正确结果的替代方法是遍历项目并使用 Any 来测试是否有任何其他项目是子路径该项目的:

var query = items
.Where(i1 => !items.Any(i2 => IsItemBelowPath(i1, i2)))
.ToList();

结果:

C:\PathD:\

关于c# - 通过单独的函数将列表中的项目相互比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3647382/

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