今回のテーマ
こんばんは、サルモリです。
今回もLinqのメソッドを紹介してきます。今回紹介するメソッドは下記です。
今回のテーマ
Linqのメソッド、GroupByの使い方。
今回はGroupByメソッドについて解説します。
GroupByメソッドを紹介するためにクラスを定義してLinqメソッドを扱う記事を先に紹介しました。
よければ、下記の記事も見てください。下記はSelectメソッドの使い方です。
CHECK
-
【C# sharp Linq】クラスを定義してSelectメソッドを使おう。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
他のLinqの記事についてはこちら
GroupByについて
GroupBy
指定した要素においてグループ化を行う。
Linqメソッドの解説の流れ
下記の流れで説明したいと思います。
行いたい処理の例を書きます。
Linqを使用するソースコードを書いていきます。
ソースコードには、リストを使います。
定義するクラスについて
今回、説明する上で使用するクラスです。前回の記事で使ったものにメーカーを追加しました。
使用するクラス
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
class Robot { string name, color, skill,maker; public Robot(string _name,string _color,string _skill,string _maker) { name = _name; color = _color; skill = _skill; maker = _maker; } public String Name { get { return name; } } public String Color { get { return color; } } public String Skill { get { return skill; } } public String Maker { get { return maker; } } } |
GroupByの使い方
GroupByの使い方について、例を書いていきます。今回行いたい処理です。
行いたい処理
メーカーで別々のリストを作りたい。
メーカーでグループ分け
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { List<Robot> robotlist = new List<Robot>(); robotlist.Add(new Robot("Rockman", "Blue", "Rock Buster","Dr Light")); robotlist.Add(new Robot("Fireman", "Red", "Firestorm","Dr Wily")); robotlist.Add(new Robot("Iceman", "Blue", "Ice Slasher", "Dr Wily")); robotlist.Add(new Robot("Elecman", "Yellow", "thunder Beam", "Dr Wily")); robotlist.Add(new Robot("Roll", "Pink", "Clean", "Dr Light")); robotlist.Add(new Robot("Airman", "Blue", "Air Shooter", "Dr Wily")); robotlist.Add(new Robot("Woodman", "Green", "Leaf Shield", "Dr Wily")); var Makerlist = robotlist.GroupBy(x => x.Maker).Select(x => x).ToList(); foreach(var maker in Makerlist) { foreach(var item in maker) { Console.Write("Maker:" + item.Maker); Console.WriteLine(" Name:" + item.Name); } Console.WriteLine("------------------"); } } } } |
result
Maker:Dr Light Name:Rockman
Maker:Dr Light Name:Roll
-------------------------------
Maker:Dr Wily Name:Fireman
Maker:Dr Wily Name:Iceman
Maker:Dr Wily Name:Elecman
Maker:Dr Wily Name:Airman
Maker:Dr Wily Name:Woodman
-------------------------------
上記のようなソースコードを書きました。GroupByによって、
ライト博士のロボットリストとワイリー博士のロボットリストが作成されてます。
指定した属性の値が一致している者同士でリストが作成されます。
別の属性も指定して見ましょう。今度はメーカーでなく色で指定してみます。
色でグループ分け
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { List<Robot> robotlist = new List<Robot>(); robotlist.Add(new Robot("Rockman", "Blue", "Rock Buster","Dr Light")); robotlist.Add(new Robot("Fireman", "Red", "Firestorm","Dr Wily")); robotlist.Add(new Robot("Iceman", "Blue", "Ice Slasher", "Dr Wily")); robotlist.Add(new Robot("Elecman", "Yellow", "thunder Beam", "Dr Wily")); robotlist.Add(new Robot("Roll", "Pink", "Clean", "Dr Light")); robotlist.Add(new Robot("Airman", "Blue", "Air Shooter", "Dr Wily")); robotlist.Add(new Robot("Woodman", "Green", "Leaf Shield", "Dr Wily")); var Colorlist = robotlist.GroupBy(x => x.Color).Select(x => x).ToList(); foreach(var color in Colorlist) { foreach(var item in color) { Console.Write("Color:" + item.Color); Console.WriteLine(" Name:" + item.Name); } Console.WriteLine("-------------------------------"); } } } } |
result
Color:Blue Name:Rockman
Color:Blue Name:Iceman
Color:Blue Name:Airman
-------------------------------
Color:Red Name:Fireman
-------------------------------
Color:Yellow Name:Elecman
-------------------------------
Color:Pink Name:Roll
-------------------------------
Color:Green Name:Woodman
-------------------------------
上記のようにグループ分けされたと思います。
今回の色の指定だと5つリストが作成されていることになりますね。
青のリストだけほしいんだけど・・・。って場合はWhere句を使いましょう。
2つ以上指定する方法
今回はさらに2つ以上指定する場合もやってみましょう。色とメーカーで分けます。
色とメーカーでグループ分け
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApp2 { class Program { static void Main(string[] args) { List<Robot> robotlist = new List<Robot>(); robotlist.Add(new Robot("Rockman", "Blue", "Rock Buster","Dr Light")); robotlist.Add(new Robot("Fireman", "Red", "Firestorm","Dr Wily")); robotlist.Add(new Robot("Iceman", "Blue", "Ice Slasher", "Dr Wily")); robotlist.Add(new Robot("Elecman", "Yellow", "thunder Beam", "Dr Wily")); robotlist.Add(new Robot("Roll", "Pink", "Clean", "Dr Light")); robotlist.Add(new Robot("Airman", "Blue", "Air Shooter", "Dr Wily")); robotlist.Add(new Robot("Woodman", "Green", "Leaf Shield", "Dr Wily")); var MakerColorlist = robotlist.GroupBy(x => new { x.Color, x.Maker }).Select(x => x).ToList(); foreach(var makercolor in MakerColorlist) { foreach(var item in makercolor) { Console.Write("Maker:" + item.Maker); Console.Write("Color:" + item.Color); Console.WriteLine(" Name:" + item.Name); } Console.WriteLine("-------------------------------"); } } } } |
result
Maker:Dr LightColor:Blue Name:Rockman
-------------------------------
Maker:Dr WilyColor:Red Name:Fireman
-------------------------------
Maker:Dr WilyColor:Blue Name:Iceman
Maker:Dr WilyColor:Blue Name:Airman
-------------------------------
Maker:Dr WilyColor:Yellow Name:Elecman
-------------------------------
Maker:Dr LightColor:Pink Name:Roll
-------------------------------
Maker:Dr WilyColor:Green Name:Woodman
-------------------------------
あまり、必要のないリストですね・・・。二つ指定したい時はSelectと同じくNewで二つ指定すれば大丈夫です。
他のLinqの記事についてはこちら
まとめ
今回もLinqメソッドの紹介記事でした。今回の取り上げたメソッドを下記に纏めます。
今回のメソッド一覧
- GroupBy
今回はGroupByについて解説しました。各属性でリストを分けたい時にすぐに実現できるのでとても便利です。
この機会に覚えてください。紹介しようとしてたLinqメソッドはあとわずかなので、頑張って記事書いていきます!
最後まで見て頂きありがとうございました。
他のLinqの記事についてはこちら