0
点赞
收藏
分享

微信扫一扫

linq-Select,SelectMany——多维列表,字典中的列表降维Collect及index的引用

云卷云舒xj 2022-02-16 阅读 52
linqc#

最近看资料,作者说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}");

在这里插入图片描述

举报

相关推荐

0 条评论