Myślisz, że zarabiasz tyle, na ile zasługujesz? Zapraszamy do wzięcia udziału w anonimowej ankiecie.
0

Mam dwa słowniki:

var dic1 = new Dictionary<int, MyClass>();

var dic2 = new Dictionary<int, MyClass>();

Jestem pewien, że nie nastąpi kolizja kluczy przy ich łączeniu.

Czy da się za pomocą LINQ wykonać złączenie tych słowników?

flag

2 Answers

3

Jesli wiesz ze klucze sa unikatowe to lepiej uzyc Concat (Union dodatkowo sprawadza unikatowosc kluczy)

dic1.Concat(dic2).ToDictionary(x => x.Key, x => x.Value)
link|flag
Union sprawdza unikalność elementów wykorzystując w tym przypadku Comparer<KeyValuePair<int, MyClass>>.Default, czyli najzwyklejsze Equals(). Z kluczem nie ma tu nic wspólnego. Ale racja - Concat() po prostu doklei elementy bez sprawdzania żadnej unikalności, więc może być lepszym rozwiązaniem. – Procent Feb 1 at 8:03
Racja, źle mi się napisało z tym kluczem ;) Dokładnie zdaje się wykorzystywany jest EqualityComparer<KeyValuePair<int, MyClass>>.Default . Equals jest o tyle niezwykły że robiony na strukturze KeyValuePair, wiec robiony po wszystkich polach. – mnajder Feb 1 at 13:03
2

Na przykład tak:

Dictionary<int, CachedItem> union = dic1.Union(dic2)
                           .ToDictionary(x => x.Key, x => x.Value);
link|flag

Your Answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.