C#.NET: List<Source>转Dictionary<Source.Key,List<Source>>


本文摘自PHP中文网,作者黄舟,侵删。

C#.NET 利用ToDictionary(),GroupBy(),可以将List转化为Dictionary,主需要一行代码!

首先看一下需求,已知cars,等于:

1

2

3

4

5

6

7

8

    List<Car> cars = new List<Car>(){               

    new Car(1,"audiA6","private"),               

    new Car(2,"futon","merchant"),               

    new Car(3,"feiren","bike"),               

    new Car(4,"bukon","private"),               

    new Car(5,"baoma","private"),               

    new Car(6,"dayun","merchant")

};

1)我想以id为键,值为Car转化为一个字典idCarDict,方法如下:

1

var idCarDict = cars.ToDictionary(car=>car.id);

这样保证能正确转化的前提为,id在列表中没有重复值。如果有重复的,会抛出向字典中添加重复值的异常。

2)我想以type为键,值car的List的typeDict,方法如下:

1

Dictionary<string, List<Car>> typeCarDict = cars.GroupBy(car => car.type).ToDictionary(r => r.Key, r => r.ToList());

分步解释:
第一步分组

1

2

cars.GroupBy(car=>car.type) //返回的结果类型为: //IEnumerable<IGroup<string,car>>;

//其中string等于car.type,也就是分组的键

第二步将IEnumerable类型转化为字典,选取合适的键,

1

ToDictionary(r=>r.Key,r=>r.ToList());//r参数代表分组对象,r.Key便是car.type;//r.ToList()操作后将分组对象转化为List对象

这种转化代码简介,比以下foreach遍历得到以car.type的字典简洁许多:

1

2

3

4

5

6

var dict = new Dictionary<string,List<Car>>();

foreach(var car in cars)

if(dict.Contains(car.type))

     dict[car.type].Add(car);

  else

    dict.Add(car.type,new List<Car>(){car}));}

C#.NET 利用ToDictionary(),GroupBy(),可以将List转化为Dictionary,主需要一行代码!

首先看一下需求,已知cars,等于:

1

2

3

4

5

6

7

8

List<Car> cars = new List<Car>(){

       new Car(1,"audiA6","private"),

       new Car(2,"futon","merchant"),

       new Car(3,"feiren","bike"),

       new Car(4,"bukon","private"),

       new Car(5,"baoma","private"),

       new Car(6,"dayun","merchant")

   };

1)我想以id为键,值为Car转化为一个字典idCarDict,方法如下:

1

var idCarDict = cars.ToDictionary(car=>car.id);

这样保证能正确转化的前提为,id在列表中没有重复值。如果有重复的,会抛出向字典中添加重复值的异常。

2)我想以type为键,值car的List的typeDict,方法如下:

1

Dictionary<string, List<Car>> typeCarDict = cars.GroupBy(car => car.type).ToDictionary(r => r.Key, r => r.ToList());

分步解释:
第一步分组

1

2

cars.GroupBy(car=>car.type) //返回的结果类型为: //IEnumerable<IGroup<string,car>>;

//其中string等于car.type,也就是分组的键

第二步将IEnumerable类型转化为字典,选取合适的键,

1

ToDictionary(r=>r.Key,r=>r.ToList());//r参数代表分组对象,r.Key便是car.type;//r.ToList()操作后将分组对象转化为List对象

这种转化代码简介,比以下foreach遍历得到以car.type的字典简洁许多:

1

2

3

4

5

6

7

8

var dict = new Dictionary<string,List<Car>>();

foreach(var car in cars)

{

  if(dict.Contains(car.type))

     dict[car.type].Add(car);

  else

    dict.Add(car.type,new List<Car>(){car}));

}

相关阅读 >>

关于c#中字典dictionary的顺序及倒序详解

c#中关于dictionary的用法详解

简单介绍C#.NET、javascript和json(图文)

C#.NET: list<source>转dictionary<source.key,list<source>>

简单介绍c#中数组、arraylist、list、dictionary的用法与区别

使用.net进行互联网开发的思考和探索

dictionary字典类在c#中的示例代码介绍

浅谈c# 之 hashtable 与 dictionary的代码实例

更多相关阅读请进入《C#.NET》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...