2012-10-08 88 views
2

我有兩個Dictionary<Person,Boolean>。 字典一個包含:聯盟字典

Person A -> false 
Person B -> true, 
Person C -> false; 

字典B包含:

Person A -> true; 
Person D -> false; 

我想有一個結果,它包含了所有的人一個時間,並設置布爾值TURE,如果一個人包含在一個真正的這兩個列表之一。

我該如何解決這個dict.Union()

感謝Kooki

+0

http://stackoverflow.com/questions/294138/merging-dictionaries-in-c-sharp –

+1

_「所有的人一個時間「_什麼讓你的人分明? –

+0

是由散列鍵或某些自定義比較確定的相等性。如果是散列,這是默認實現(從語義上來說是ref比較,所以從值的角度來看兩個相同的對象仍然會不同)或者你自己的實現? –

回答

4

聽起來像是你可以使用:

var result = first.Union(second) 
        .GroupBy(x => x.Key)    // Group by dictionary keys 
        .ToDictionary(g => g.Key,   // Key for new dictionary 
           g => g.Any(p => p.Value)); // Any true values? 
+1

只有在'Person'中正確實現'GetHashCode'和'Equals'時,'Union'纔有效。 –

+3

@TimSchmelter:它們已經在字典中了,所以它已經可以工作,或者OP只是使用引用等式。 –

+1

謝謝,它適用於Person類上的GetHashCode()運行良好... :-) – Kooki