使用C#
& linq
,我希望将所有带有重复ID的项目放在一个列表中,将另一个列表放入具有唯一ID的项目。
我的初始列表
Id: 0 Name: ItemA
Id: 1 Name: ItemB
Id: 1 Name: ItemC
Id: 2 Name: ItemD
Id: 3 Name: ItemE
Id: 3 Name: ItemF
Id: 4 Name: ItemG
Id: 5 Name: ItemH
我想要一个列表:
Id: 0 Name: ItemA
Id: 1 Name: ItemB
Id: 2 Name: ItemD
Id: 3 Name: ItemE
Id: 4 Name: ItemG
Id: 5 Name: ItemH
另一个列表:
Id: 1 Name: ItemC
Id: 3 Name: ItemF
答案 0 :(得分:3)
对于这个问题,我会选择非linq解决方案。
void Main()
{
var list = new List<Item>()
{
new Item(){Id= 0, Name= "ItemA"},
new Item(){Id= 1, Name= "ItemB"},
new Item(){Id= 1, Name= "ItemC"},
new Item(){Id= 2, Name= "ItemD"},
new Item(){Id= 3, Name= "ItemE"},
new Item(){Id= 3, Name= "ItemF"},
new Item(){Id= 4, Name= "ItemG"},
new Item(){Id= 5, Name= "ItemH"}
};
var set = new HashSet<int>();
var unique = new List<Item>();
var dupes = new List<Item>();
foreach (var item in list)
{
if(set.Add(item.Id))
unique.Add(item);
else
dupes.Add(item);
}
}
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
}
linq实现可能如下所示:
var unique = list.GroupBy(x => x.Id).Select(x => x.First());
var dupes = list.Except(unique);