kin*_*005 3 .net c# arrays duplicates
我有一个FileInfo对象数组,其中包含我想要过滤的重复元素,即删除重复项,元素按上次写入时间使用自定义比较器排序.文件名的格式如下:
file {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);
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
更新:
忘了添加警告,有问题的程序使用.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();
Run Code Online (Sandbox Code Playgroud)
如果您希望这些文件也按上次写入时间排序,请在调用.OrderByDescending(file => file.LastWriteTime)之前输入ToArray.
您当然可以使用更有效的技术从每个组中查找最新文件,例如使用MaxBy运算符.
编辑:
在.NET 2.0中,您可以Dictionary<string, List<FileInfo>>从数组中构造一个(键为"文件组"),然后从字典集合的每个列表中提取最新文件Values,以生成结果.
如果您使用的是C#3或更高版本,则另一种选择是使用LINQBridge,它允许您在针对.NET 2.0时使用LINQ to Objects.
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |