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型別轉換為字典,選取合適的鍵,
1 | ToDictionary(r=>r.Key,r=>r.ToList());
|
登入後複製
登入後複製
這種轉換程式碼簡介,比以下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型別轉換為字典,選取合適的鍵,
1 | ToDictionary(r=>r.Key,r=>r.ToList());
|
登入後複製
登入後複製
這種轉換程式碼簡介,比以下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}));
}
|
登入後複製
#