今回のテーマ
こんばんは、サルモリです。
今回のテーマは下記の記事について書いていきます。
今回のテーマ
グループ化する項目を複数指定する方法
今回はグループ化する項目を複数指定する方法について記述していきます。
GroupByメソッドの使用方法について、下記の記事に書いてあります。
CHECK
-
【C# sharp Linq】GroupByを使ってグループ化しよう。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
他の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 29 30 |
class Robot { string name, color,maker; int strength; public Robot(string _name,string _color,int _strength,string _maker) { name = _name; color = _color; strength = _strength; maker = _maker; } public String Name { get { return name; } } public String Color { get { return color; } } public int Strength { get { return strength; } } public String Maker { get { return maker; } } } } |
複数項目でグループ化する方法
早速、複数項目でグループ化するソースコードを書いていきます。
色と作成者別でグループ化をしてみます。
色と作成者別でグループ化を行う方法
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 33 34 |
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", 4,"Dr Light")); robotlist.Add(new Robot("Fireman", "Red", 3,"Dr Wily")); robotlist.Add(new Robot("Iceman", "Blue", 3, "Dr Wily")); robotlist.Add(new Robot("Elecman", "Yellow", 4, "Dr Wily")); robotlist.Add(new Robot("Roll", "Pink", 1, "Dr Light")); robotlist.Add(new Robot("Airman", "Blue", 2, "Dr Wily")); robotlist.Add(new Robot("Woodman", "Green", 2, "Dr Wily")); robotlist.Add(new Robot("Quickman", "Red", 5, "Dr Wily")); robotlist.Add(new Robot("Shadowman", "Blue", 5, "Dr Wily")); robotlist.Add(new Robot("Bubbleman", "Green", 3, "Dr Wily")); var groupcolormakerlist = robotlist.GroupBy(x => new { x.Color, x.Maker }).ToList(); foreach (var colormakerlist in groupcolormakerlist) { foreach (var item in colormakerlist) { Console.WriteLine("Color:" + item.Color + " Maker:" + item.Maker + "Name:" + item.Name); } Console.WriteLine("---------------------------------------------"); } } } } |
result
Color:Blue Maker:Dr LightName:Rockman
---------------------------------------------
Color:Red Maker:Dr WilyName:Fireman
Color:Red Maker:Dr WilyName:Quickman
---------------------------------------------
Color:Blue Maker:Dr WilyName:Iceman
Color:Blue Maker:Dr WilyName:Airman
Color:Blue Maker:Dr WilyName:Shadowman
---------------------------------------------
Color:Yellow Maker:Dr WilyName:Elecman
---------------------------------------------
Color:Pink Maker:Dr LightName:Roll
---------------------------------------------
Color:Green Maker:Dr WilyName:Woodman
Color:Green Maker:Dr WilyName:Bubbleman
---------------------------------------------
Groupbyメソッド内で色と作成者の2つの項目を生成することでグループ化出来ていますね。
上記のやり方ともう1つ複数項目のグループ化を行う方法があるので、紹介したいと思います。
複数項目でグループ化する方法(タプルを利用する方法)
もう一つのやり方はタプルを使用する方法です。Groupby句で2つ項目を生成した箇所をタプルに置き換えるだけです。
早速、やってみましょう。
タプルについては下記の記事が分かりやすいと思います。
こちらもCHECK
-
【C# sharp】タプルを使用して2つの値を返す方法
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
色と作成者でグループ化を行う方法(タプルを利用する方法)
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 33 34 |
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", 4,"Dr Light")); robotlist.Add(new Robot("Fireman", "Red", 3,"Dr Wily")); robotlist.Add(new Robot("Iceman", "Blue", 3, "Dr Wily")); robotlist.Add(new Robot("Elecman", "Yellow", 4, "Dr Wily")); robotlist.Add(new Robot("Roll", "Pink", 1, "Dr Light")); robotlist.Add(new Robot("Airman", "Blue", 2, "Dr Wily")); robotlist.Add(new Robot("Woodman", "Green", 2, "Dr Wily")); robotlist.Add(new Robot("Quickman", "Red", 5, "Dr Wily")); robotlist.Add(new Robot("Shadowman", "Blue", 5, "Dr Wily")); robotlist.Add(new Robot("Bubbleman", "Green", 3, "Dr Wily")); var groupcolormakerlist = robotlist.GroupBy(x => (x.Color, x.Maker)).ToList(); foreach (var colormakerlist in groupcolormakerlist) { foreach (var item in colormakerlist) { Console.WriteLine("Color:" + item.Color + " Maker:" + item.Maker + "Name:" + item.Name); } Console.WriteLine("---------------------------------------------"); } } } } |
result
Color:Blue Maker:Dr LightName:Rockman
---------------------------------------------
Color:Red Maker:Dr WilyName:Fireman
Color:Red Maker:Dr WilyName:Quickman
---------------------------------------------
Color:Blue Maker:Dr WilyName:Iceman
Color:Blue Maker:Dr WilyName:Airman
Color:Blue Maker:Dr WilyName:Shadowman
---------------------------------------------
Color:Yellow Maker:Dr WilyName:Elecman
---------------------------------------------
Color:Pink Maker:Dr LightName:Roll
---------------------------------------------
Color:Green Maker:Dr WilyName:Woodman
Color:Green Maker:Dr WilyName:Bubbleman
---------------------------------------------
先ほどと同様に色と作成者別に出力されましたね!
タプルを使用して、2項目のグループ分けをしてみよう
早速、タプルで2項目指定してグループ分けしてみましょう。タプルと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 32 33 34 |
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { List<Robot> robotlist = new List<Robot>(); robotlist.Add(new Robot("Rockman", "Dr Light", "Blue", 1, 5)); robotlist.Add(new Robot("Rollchan", "Dr Light", "Pink", 1, 1)); robotlist.Add(new Robot("Heatman", "Dr Wily", "Red", 2, 2)); robotlist.Add(new Robot("Fireman", "Dr Wily", "Red", 1, 3)); robotlist.Add(new Robot("Iceman", "Dr Wily", "Blue", 1, 4)); robotlist.Add(new Robot("Quickman", "Dr Wily", "Red", 2, 5)); robotlist.Add(new Robot("Airman", "Dr Wily", "Blue", 2, 3)); robotlist.Add(new Robot("Shadowman", "Dr Wily", "Blue", 3, 5)); robotlist.Add(new Robot("Snakeman", "Dr Wily", "Green", 3, 3)); robotlist.Add(new Robot("Woodman", "Dr Wily", "Green", 2, 3)); robotlist.Add(new Robot("Sparkman", "Dr Wily", "Red", 3, 4)); robotlist.Add(new Robot("Hardman", "Dr Wily", "Blue", 3, 4)); robotlist.Add(new Robot("Flashman", "Dr Wily", "Blue", 2, 2)); var robotslists = robotlist.GroupBy(n => (n.getMaker(),n.getColor())); foreach(var rlist in robotslists) { foreach(var robot in rlist) { Console.WriteLine("Name:" + robot.getName() + " Maker:" + robot.getMaker() + " Color:" + robot.getColor()); } Console.WriteLine("----------------------------------------"); } } } |
出力結果
Name:Rockman Maker:Dr Light Color:Blue
----------------------------------------
Name:Rollchan Maker:Dr Light Color:Pink
----------------------------------------
Name:Heatman Maker:Dr Wily Color:Red
Name:Fireman Maker:Dr Wily Color:Red
Name:Quickman Maker:Dr Wily Color:Red
Name:Sparkman Maker:Dr Wily Color:Red
----------------------------------------
Name:Iceman Maker:Dr Wily Color:Blue
Name:Airman Maker:Dr Wily Color:Blue
Name:Shadowman Maker:Dr Wily Color:Blue
Name:Hardman Maker:Dr Wily Color:Blue
Name:Flashman Maker:Dr Wily Color:Blue
----------------------------------------
Name:Snakeman Maker:Dr Wily Color:Green
Name:Woodman Maker:Dr Wily Color:Green
----------------------------------------
凄く簡単ですよね!Groupbyでグループ別にしたい項目をタプルに設定するだけで出来てしまいます!素晴らしい!
1 |
robotlist.GroupBy(n => (n.getMaker(),n.getColor())); |
シリーズ、強さ別にも分けてみましょう!
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 33 34 |
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { List<Robot> robotlist = new List<Robot>(); robotlist.Add(new Robot("Rockman", "Dr Light", "Blue", 1, 5)); robotlist.Add(new Robot("Rollchan", "Dr Light", "Pink", 1, 1)); robotlist.Add(new Robot("Heatman", "Dr Wily", "Red", 2, 2)); robotlist.Add(new Robot("Fireman", "Dr Wily", "Red", 1, 3)); robotlist.Add(new Robot("Iceman", "Dr Wily", "Blue", 1, 4)); robotlist.Add(new Robot("Quickman", "Dr Wily", "Red", 2, 5)); robotlist.Add(new Robot("Airman", "Dr Wily", "Blue", 2, 3)); robotlist.Add(new Robot("Shadowman", "Dr Wily", "Blue", 3, 5)); robotlist.Add(new Robot("Snakeman", "Dr Wily", "Green", 3, 3)); robotlist.Add(new Robot("Woodman", "Dr Wily", "Green", 2, 3)); robotlist.Add(new Robot("Sparkman", "Dr Wily", "Red", 3, 4)); robotlist.Add(new Robot("Hardman", "Dr Wily", "Blue", 3, 4)); robotlist.Add(new Robot("Flashman", "Dr Wily", "Blue", 2, 2)); var robotslists = robotlist.GroupBy(n => (n.getSeries(),n.getStrength())); foreach(var rlist in robotslists) { foreach(var robot in rlist) { Console.WriteLine("Name:" + robot.getName() + " Series:" + robot.getSeries() + " Strength:" + robot.getStrength()); } Console.WriteLine("----------------------------------------"); } } } |
出力結果
Name:Rockman Series:1 Strength:5
----------------------------------------
Name:Rollchan Series:1 Strength:1
----------------------------------------
Name:Heatman Series:2 Strength:2
Name:Flashman Series:2 Strength:2
----------------------------------------
Name:Fireman Series:1 Strength:3
----------------------------------------
Name:Iceman Series:1 Strength:4
----------------------------------------
Name:Quickman Series:2 Strength:5
----------------------------------------
Name:Airman Series:2 Strength:3
Name:Woodman Series:2 Strength:3
----------------------------------------
Name:Shadowman Series:3 Strength:5
----------------------------------------
Name:Snakeman Series:3 Strength:3
----------------------------------------
Name:Sparkman Series:3 Strength:4
Name:Hardman Series:3 Strength:4
----------------------------------------
沢山グループが出来てしまいましたが、正しくグループ分けされていますね!
タプルを使用して、3項目のグループ分けをしてみよう
3項目以上も同様にタプルに複数個指定するだけで大丈夫です。
メーカー、色、シリーズ別に分けてみましょう。
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 33 34 |
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { List<Robot> robotlist = new List<Robot>(); robotlist.Add(new Robot("Rockman", "Dr Light", "Blue", 1, 5)); robotlist.Add(new Robot("Rollchan", "Dr Light", "Pink", 1, 1)); robotlist.Add(new Robot("Heatman", "Dr Wily", "Red", 2, 2)); robotlist.Add(new Robot("Fireman", "Dr Wily", "Red", 1, 3)); robotlist.Add(new Robot("Iceman", "Dr Wily", "Blue", 1, 4)); robotlist.Add(new Robot("Quickman", "Dr Wily", "Red", 2, 5)); robotlist.Add(new Robot("Airman", "Dr Wily", "Blue", 2, 3)); robotlist.Add(new Robot("Shadowman", "Dr Wily", "Blue", 3, 5)); robotlist.Add(new Robot("Snakeman", "Dr Wily", "Green", 3, 3)); robotlist.Add(new Robot("Woodman", "Dr Wily", "Green", 2, 3)); robotlist.Add(new Robot("Sparkman", "Dr Wily", "Red", 3, 4)); robotlist.Add(new Robot("Hardman", "Dr Wily", "Blue", 3, 4)); robotlist.Add(new Robot("Flashman", "Dr Wily", "Blue", 2, 2)); var robotslists = robotlist.GroupBy(n => (n.getMaker(),n.getColor(),n.getSeries())); foreach(var rlist in robotslists) { foreach(var robot in rlist) { Console.WriteLine("Name:" + robot.getName() + " Maker:" + robot.getMaker() + " Color:" + robot.getColor() + " Series:" + robot.getSeries()); } Console.WriteLine("----------------------------------------"); } } } |
出力結果
Name:Rockman Maker:Dr Light Color:Blue Series:1
----------------------------------------
Name:Rollchan Maker:Dr Light Color:Pink Series:1
----------------------------------------
Name:Heatman Maker:Dr Wily Color:Red Series:2
Name:Quickman Maker:Dr Wily Color:Red Series:2
----------------------------------------
Name:Fireman Maker:Dr Wily Color:Red Series:1
----------------------------------------
Name:Iceman Maker:Dr Wily Color:Blue Series:1
----------------------------------------
Name:Airman Maker:Dr Wily Color:Blue Series:2
Name:Flashman Maker:Dr Wily Color:Blue Series:2
----------------------------------------
Name:Shadowman Maker:Dr Wily Color:Blue Series:3
Name:Hardman Maker:Dr Wily Color:Blue Series:3
----------------------------------------
Name:Snakeman Maker:Dr Wily Color:Green Series:3
----------------------------------------
Name:Woodman Maker:Dr Wily Color:Green Series:2
----------------------------------------
Name:Sparkman Maker:Dr Wily Color:Red Series:3
----------------------------------------
沢山別れてましたが、3つ以上でも正しくグループ分けされていますね。
他のLinqの記事についてはこちら
まとめ
今回は複数項目のグループ化について2つ紹介しました。
個人的には、タプルを利用した方法が好きです。タプルにすると、柔軟に値を取り出したり出来ますし、理解もしやすいです。
今回の記事は短いですが、以上です。最後まで見て頂き、ありがとうございました。
新しく類似する記事を書いたので、下記の記事も是非見てください。
CHECK
-
【C# sharp Linq】Groupbyでグループ化した最大値、最小値、合計、平均値、件数を求める方法
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
他のLinqの記事についてはこちら