使用条件从列表中删除重复项

时间:2013-04-29 21:31:00

标签: c# linq duplicates

我想从包含以下内容的列表中删除重复的文件名:

http://www.test.com/download/imagename_A.jpg
http://www.test.com/download/imagename_B.jpg
http://www.test.com/download/imagename_C.jpg
http://fc07.test.net/fs49/f/2009/216/6/f/imagename_A.jpg
http://fc09.test.net/fs49/f/2009/195/d/8/imagename_B.jpg

我希望最终列表能够找到具有SAME文件名的重复项,如果有,则通过domain.com选择domain.net,从而产生最终列表:

http://fc07.test.net/fs49/f/2009/216/6/f/imagename_A.jpg
http://fc09.test.net/fs49/f/2009/195/d/8/imagename_B.jpg
http://www.test.com/download/imagename_C.jpg 

我怀疑这可以通过linq完成(我发现这篇文章 - Find Duplicate in list but with criteria),但我对linq不太了解,以使它对我有用。

2 个答案:

答案 0 :(得分:2)

var result = urls.GroupBy(url => Path.GetFileName(url))
                .Select(g => g.OrderByDescending(u=>new Uri(u).DnsSafeHost.EndsWith(".net")).First())
                .ToList();

答案 1 :(得分:0)

您可以使用string.split('/')将URL(在将URL转换为字符串后)拆分为“/”,然后通过检查创建的数组的最后位置来比较文件名。然后,您可以使用string.split('。')拆分数组的第二个位置,并在该数组的第三个位置检查.net / .com。