今回のテーマ
こんばんは、サルモリです。
今回のテーマは下記について書いていきます。
今回のテーマ
リストの中から最大(最小)の要素を指定し、そのレコードを取得する方法
既に紹介したメソッドを組み合わせて、最大(最小)の要素を指定し、そのレコードを取得する方法を紹介します。
今回使うメソッドはMax、Select、Where、FirstOrDefaultなどを使っていきます。
下記の記事でそれぞれのメソッドについて解説しているので良ければみてください。
CHECK
-
【C# sharp Linq】Selectメソッド、Whereメソッドを解説します。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 C#言語のL ...
続きを見る
CHECK
-
【C# sharp Linq】Avarageメソッド、Maxメソッド、Minメソッド、Sumメソッドを解説します。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
他のLinqの記事についてはこちら
Linqの演習問題はこちら
他の演習問題はこちら
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 29 |
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; } } } |
使用するデータ
実際はプログラミング内でリストに追加しますが、下記のようなデータとします。
Name | Color | Strength | maker |
Rockman | Blue | 5 | Dr Light |
Fireman | Red | 3 | Dr Wily |
Iceman | Blue | 3 | Dr Wily |
Elecman | Yellow | 4 | Dr Wily |
Roll | Pink | 1 | Dr Light |
Airman | Blue | 2 | Dr Wily |
Woodman | Green | 2 | Dr Wily |
Quickman | Red | 5 | Dr Wily |
最大値の要素のレコードを取り出す
早速、一番強いロボットのレコードを取り出していきます。
まず、Maxメソッドで要素を指定した場合に何を返すのか見てみましょう。
Maxメソッドで要素を指定してみる
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 |
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", 5,"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")); var max = robotlist.Max(x => x.Strength); Console.WriteLine(max); } } } |
result
5
最大値の5を返しましたね。この5を使用して、レコードも出力していきましょう。
行いたい処理
強さが最大値のロボットを出力する。
強さが最大値のロボットを出力する。
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 |
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", 5,"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")); var max = robotlist.Max(x => x.Strength); var maxstrengthlist = robotlist.Where(x => x.Strength == max).Select(x => x.Name).ToList(); foreach(var item in maxstrengthlist) { Console.WriteLine(item); } } } } |
result
Rockman
Quickman
上記の例のように、2つのLinqに分けることで1番強いロボットを出力することができます。
ロックマンとクイックマンを出力できてます。今度は片方を出力するためにFirstOrDefaultメソッドも指定してみましょう。
1番強いロボットの中から1体出力する
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 |
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", 5,"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")); var max = robotlist.Max(x => x.Strength); var maxstrengthrobot = robotlist.Where(x => x.Strength == max).Select(x => x.Name).FirstOrDefault(); Console.WriteLine(maxstrengthrobot); } } } |
result
Rockman
ロックマンが出力できていますね。
FirstOrDefaultメソッドは条件を選択することも可能です。
一番強いロボットの中からQを含むロボットを1体出力する
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 |
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", 5,"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")); var max = robotlist.Max(x => x.Strength); var maxstrengthrobot = robotlist.Where(x => x.Strength == max).Select(x => x.Name).FirstOrDefault(x => x.Contains("Q")); Console.WriteLine(maxstrengthrobot); } } } |
result
Quickman
指定した条件のロボットが出力されましたね。
まとめ
今回、使用したメソッドは下記です。
今回のメソッド一覧
- Max
- FirstOrDefault
- Where
- Select
今回は指定した要素が一番大きいレコードを出力する方法を紹介しました。
このように様々なメソッドを組み合わせることで色々なことができるのが分かりますね。
他にも色々なメソッドを組み合わせていきます。
他のLinqの記事についてはこちら
Linqの演習問題はこちら
他の演習問題はこちら