从列表中清除重复项及其实例 [英] Clean duplicates and their instances from a list
本文介绍了从列表中清除重复项及其实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个像这样的数据模型:
I have a datamodel like this :
public class AmpFile
{
public string filename { get; set; }
public string actualpath { get; set; }
}
现在我有一个这样的列表:
Now I have a list of it like this :
[ list member 1 ] - filename: "testfile1.jpg" - actualpath: "C:\testpath\testfile1.jpg"
[ list member 2 ] - filename: "brickwall.jpg" - actualpath: "C:\testpath\brickwall.jpg"
[ list member 3 ] - filename: "mydata.txt" - actualpath: "D:\mydata.txt"
[ list member 4 ] - filename: "testfile1.jpg" - actualpath: "E:\demo\testfile1.jpg"
[ list member 5 ] - filename: "mydata.txt" - actualpath: "F:\somefolder\mydata.txt"
[ list member 6 ] - filename: "testfile1.jpg" - actualpath: "F:\somefolder\testfile1.jpg"
[ list member 7 ] - filename: "testfile2.jpg" - actualpath: "F:\somefolder\testfile2.jpg"
[ list member 7 ] - filename: "testfile3.jpg" - actualpath: "D:\testfile3.jpg"
现在我想查找每个成员的重复项,如果有重复项,我想删除重复项+引用本身,所以我想要实现的结果是:
Now I want to find duplicates of each member and if there's a duplicate of it , I want to remove duplicates + the reference itself so the result I want to achieve is :
[ list member 1 ] - filename: "brickwall.jpg" - actualpath: "C:\testpath\brickwall.jpg"
[ list member 2 ] - filename: "testfile2.jpg" - actualpath: "F:\somefolder\testfile2.jpg"
[ list member 3 ] - filename: "testfile3.jpg" - actualpath: "D:\testfile3.jpg"
我该怎么办?
推荐答案
you can do it with Linq, by using Group by and filter all elements that have count == 1
, like the following code:
1 - Prepare list of ampFile
:
List<AmpFile> ampFiles = new List<AmpFile>
{
new AmpFile{filename="testfile1.jpg",actualpath="C:\\testpath\\testfile1.jpg"},
new AmpFile{filename="brickwall.jpg",actualpath="C:\\testpath\\brickwall.jpg"},
new AmpFile{filename="mydata.txt",actualpath="D:\\mydata.txt"},
new AmpFile{filename="testfile1.jpg",actualpath="E:\\demo\testfile1.jpg"},
new AmpFile{filename="mydata.txt",actualpath="F:\\somefolder\\mydata.txt"},
new AmpFile{filename="testfile1.jpg",actualpath="F:\\somefolder\\testfile1.jpg"},
new AmpFile{filename="testfile2.jpg",actualpath="F:\\somefolder\\testfile2.jpg"},
new AmpFile{filename="testfile3.jpg",actualpath="D:\\testfile3.jpg"},
};
2-调用groupBy
并使用Where
进行过滤:
2 - Call groupBy
and filter with Where
:
List<AmpFile> notDuplicatedAmpFiles = ampFiles.GroupBy(x => x.filename)
.Where(x => x.Count() == 1)
.SelectMany(x => x)
.ToList();
3-演示:
foreach(AmpFile ampFile in notDuplicatedAmpFiles)
{
Console.WriteLine($"fileName :{ampFile.filename}, actualPath :{ampFile.actualpath}");
}
4-结果:
fileName :brickwall.jpg, actualPath :C:\testpath\brickwall.jpg
fileName :testfile2.jpg, actualPath :F:\somefolder\testfile2.jpg
fileName :testfile3.jpg, actualPath :D:\testfile3.jpg
我希望有帮助.
这篇关于从列表中清除重复项及其实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文