gpt4 book ai didi

c# - 过滤具有重复元素的数组

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

我有一个 FileInfo 对象数组,其中包含我想要过滤的重复元素,即删除重复项,这些元素使用自定义比较器按上次写入时间排序。文件名格式如下:

文件{number}{YYYMMDD}{HHMMSS}.txt

我想知道的是,是否有一种优雅的方法可以过滤掉具有相同文件号的两个文件,以便列表中只出现最新的文件,即我的数组中有两个元素,文件如下姓名:

file1_20110214_090020.txt

file1_20101214_090020.txt

我想保留最新版本的file1。我获取文件的代码如下:

 FileInfo[] listOfFiles = diSearch.GetFiles(fileSearch);
IComparer compare = new FileComparer(FileComparer.CompareBy.LastWriteTime);
Array.Sort(listOfFiles, compare);

感谢您的帮助。

更新:

忘记添加警告,有问题的程序使用的是 .Net 2.0,所以不幸的是没有 LINQ。抱歉造成混淆,上面我更正了文件号是一样的

最佳答案

使用 LINQ,您可以:

var listOfFiles = diSearch
.GetFiles(fileSearch)
.GroupBy(file => file.Name.Substring(file.Name.IndexOf('_')))
.Select(g => g.OrderBy(file => file.LastWriteTime).Last())
.ToArray();

如果您希望这些文件也按上次写入时间排序,请放入 .OrderByDescending(file => file.LastWriteTime)ToArray 之前打电话。

您当然可以使用更有效的技术从每个组中查找最新文件,例如 MaxBy 运营商。

编辑:

在 .NET 2.0 中,您可以构造一个 Dictionary<string, List<FileInfo>> (键为 'file-group'),然后从字典的 Valueseach 列表中提取最新文件收集,产生结果。

如果您使用的是 C# 3 或更高版本,另一种选择是使用 LINQBridge ,它允许您在面向 .NET 2.0 的同时使用 LINQ to Objects。

关于c# - 过滤具有重复元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5035206/

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