C# - 结合收藏问题

Yip*_*Yay 2 c# linq collections merge

如果我有一个IDictionary<int, int>,是否有可能收到一个IEnumerable<int>,其中包含每个被KeyValuePair<int, int>拆解成(int, int)一个接一个插入的两个条目?

小例子:

Dictionary:
5 - 25
6 - 36
7 - 49

Wanted Enumerable:
5, 25, 6, 36, 7, 49
Run Code Online (Sandbox Code Playgroud)

另外,我希望在一个非常漂亮的声明中有这个,但我想不出一个合适的:)


更新:

是否LINQ允许插入每一个以上的元素.Select声明,共享的东西的想法:

xyz.Select(t => (t, null))
Run Code Online (Sandbox Code Playgroud)

使得所得Enumerable将同时包含tnull之后呢?

Rus*_*Cam 8

你可以使用SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>)(加上重载).这是一个例子

var dict = new Dictionary<int, int> {
   { 5, 25 },
   { 6, 36 },
   { 7, 49 } 
}; 

var projection = dict.SelectMany(kv => new[] { kv.Key, kv.Value });
Run Code Online (Sandbox Code Playgroud)

根据评论,这只是实现您所要求的一种方式.

  • 不是真的,你_could_(ab)使用`dict.SelectMany(kvp => new [] {kvp.Key,kvp.Value})`只要可以为Key和Value类型推断出枚举类型 (3认同)