C#.NET は ToDictionary() と GroupBy() を使用してリストを辞書に変換します。必要なコードは 1 行だけです。
まず要件を見てください:
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 に変換します。
var idCarDict = cars.ToDictionary(car=>car.id);
正しい変換を保証するための前提条件は、リスト内に重複する ID 値がないことです。重複がある場合、重複した値を辞書に追加するために例外がスローされます。
2) type をキーとして使用し、車のリストの typeDict を使用します。方法は次のとおりです。
Dictionary<string, List<Car>> typeCarDict = cars.GroupBy(car => car.type).ToDictionary(r => r.Key, r => r.ToList());
ステップバイステップの説明:
最初のステップはグループ化です
cars.GroupBy(car=>car.type) //返回的结果类型为: //IEnumerable<IGroup<string,car>>; //其中string等于car.type,也就是分组的键
2 番目のステップは次のとおりです。 IEnumerable 型を辞書に変換し、適切なキーを選択するには、
ToDictionary(r=>r.Key,r=>r.ToList());//r参数代表分组对象,r.Key便是car.type;//r.ToList()操作后将分组对象转化为List对象
この変換コードの導入は、car.type で辞書を取得する次の foreach トラバーサルよりもはるかに簡単です:
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 を使用する()、リストは 1 行のコードのみで辞書に変換できます。
まず、既知の車は次のとおりです:
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 に変換したいと思います。メソッドは次のとおりです。
var idCarDict = cars.ToDictionary(car=>car.id);
Dictionary<string, List<Car>> typeCarDict = cars.GroupBy(car => car.type).ToDictionary(r => r.Key, r => r.ToList());
最初のステップはグループ化です
cars.GroupBy(car=>car.type) //返回的结果类型为: //IEnumerable<IGroup<string,car>>; //其中string等于car.type,也就是分组的键
ToDictionary(r=>r.Key,r=>r.ToList());//r参数代表分组对象,r.Key便是car.type;//r.ToList()操作后将分组对象转化为List对象