你应该结合ToDictionary使用的GroupBy:
var dict = list.GroupBy(item => item.WinPct).ToDictionary(group => group.Key);
foreach (var item in dict)
{
Console.Out.WriteLine("Key (winpct which is same for items): {0}", item.Key);
if(item.Value.Count() > 1)
{
foreach (var groupItem in item.Value)
{
Console.Out.WriteLine("GroupItem: {0} - {1}", groupItem.TeamId, groupItem.WinPct);
item.Tied = true;
}
}
}
输入:
list.Add(new Rank() { TeamId = 1, WinPct = 1 });
list.Add(new Rank() { TeamId = 2, WinPct = 1 });
list.Add(new Rank() { TeamId = 3, WinPct = 2 });
list.Add(new Rank() { TeamId = 4, WinPct = 2 });
list.Add(new Rank() { TeamId = 5, WinPct = 5 });
list.Add(new Rank() { TeamId = 6, WinPct = 6 });
输出:
Key (winpct which is same for items): 1
GroupItem: 1 - 1
GroupItem: 2 - 1
Key (winpct which is same for items): 2
GroupItem: 3 - 2
GroupItem: 4 - 2
Key (winpct which is same for items): 5
GroupItem: 5 - 5
Key (winpct which is same for items): 6
GroupItem: 6 - 6
编辑: 现在它也将设置绑定属性。我以为你只是让这种黑客合并,然后以某种方式后,成为一本字典。如果您只想设置tied
属性,则最好使用dasblinkenlights解决方案。
在本例中,我返回了一个基于winPct的字典作为关键字,但是如何知道哪些关键字中有多个关键字? – AmericanSuave
字典项目的值是IGrouping,它允许您枚举子项目。 (和.Count()也是)。我改变了代码,现在它检查是否有多个相同的条目。 –
fixagon