最近看资料,作者说SelectMany就是其他语言中的Collect,顿时对SelectMany的理解才彻底清晰起来。
- 说明:本文的调试环境为Jupyter C#
一、List降维SelectMany:把如下的数据降维解开
List降维:【三维】 降成 【二维】,【二维】 降成 【一维】
附录、代码清单
var list1 = new List<List<string>>()
{
new List<string>() { "a1", "a2", "a3" },
new List<string>() { "b1", "b2", "b3" },
new List<string>() { "c1", "c2", "c3" }
};
var list2 = new List<List<string>>()
{
new List<string>() { "d1", "d2", "d3" },
new List<string>() { "e1", "e2", "e3" },
new List<string>() { "f1", "f2", "f3" }
};
var list3 = new List<List<string>>()
{
new List<string>() { "g1", "g2", "g3" },
new List<string>() { "h1", "h2", "h3" },
new List<string>() { "i1", "i2", "i3" }
};
List<List<List<string>>> listAll = new List<List<List<string>>>() { list1,list2,list3};
display(listAll);
var collect1 = listAll.SelectMany(x => x);
display(collect1);
var collect2 = collect1.SelectMany(x => x);
display(collect2);
var collect3 = listAll
.SelectMany(x => x)
.SelectMany(y => y);
display(collect3);
二、字典中的多维List用SelectMany降维后收集结果
附录:代码
var list1 = new List<List<string>>()
{
new List<string>() { "a1", "a2", "a3" },
new List<string>() { "b1", "b2", "b3" },
new List<string>() { "c1", "c2", "c3" }
};
var list2 = new List<List<string>>()
{
new List<string>() { "d1", "d2", "d3" },
new List<string>() { "e1", "e2", "e3" },
new List<string>() { "f1", "f2", "f3" }
};
var list3 = new List<List<string>>()
{
new List<string>() { "g1", "g2", "g3" },
new List<string>() { "h1", "h2", "h3" },
new List<string>() { "i1", "i2", "i3" }
};
Dictionary<string, List<List<string>>> listDict = new Dictionary<string, List<List<string>>>();
listDict["key1"] = list1;
listDict["key2"] = list2;
listDict["key3"] = list3;
display(listDict);
var res1 = listDict.ToList();
display(res1);
var res2 = listDict.ToList().SelectMany(kvp=>kvp.Value);
display(res2);
var res3 = res2.SelectMany(x=>x);
display(res3);
三、对一个list执行Select/SelectMany时,如何在lambda里面引用当前item的index值
(1)需求:
(2)自己想象的实现方式:
-
1、 最初的List
-
2、装箱成List
-
3、对List执行map
(3)简洁的实现方式
list.Select((item,index)=>{…})
var list = new List<string>() { "a", "b", "c","d","e" };
var list2 = list.Select((item,index)=>$"{item}@{index}");