你應該結合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