的我有兩個的GroupBy結果的結果:LINQ的:集團若干的GroupBy
IEnumerable<IGrouping<long, MyClass>> result1 = ...;
IEnumerable<IGrouping<long, MyClass>> result2 = ...;
我希望把它們連成一個序列。 result2中的某些元素可能具有IGrouping鍵,這些鍵也是result1中的鍵。因此,標準的Enumerable.Concat
不起作用:
IEnumerable<IGrouping<long, MyClass>> result = result1.Concat(result2);
使用相同的密鑰中的項目的結果序列兩次提到。顯然,我需要一個特殊的Concat
用於IGrouping<TKey, TSource>
這樣的:
public static IEnumerable<IGrouping<TKey, TSource>> Concat<TSource, TKey>
(this IEnumerable<IGrouping<TKey, TSource>> first,
IEnumerable<IGrouping<TKey, TSource>> second)
我可以再次取消對組中的所有元素,並將它們組合,但是這當然是一種浪費。我看過source code of Enumerable.GroupBy。該方法創建了一個GroupedEnumerable對象,該對象將像列舉的GroupedEnumerable一樣創建一個Lookup對象。
我應該做一些類似的事情,還是有更好的(更容易掌握)的方法?
此方法效果。甚至更快的方法,我使用的方法(創建一個字典並添加每個不存在的組,或addRange到現有的組。不知道你的靜態Create函數的優點是什麼,而不是隻使用構造函數 –
Hi Harald,這只是爲了方便,類似於'Tuple.Create',以便讓編譯器推斷泛型參數。當然,如果您願意,您可以直接使用構造函數。 –