今回のテーマ
こんばんは、サルモリです。
今回もLinqのメソッドを紹介してきます。今回紹介するメソッドは下記です。
今回のテーマ
2つ以上の項目をソートする方法
既にソート方法としてOrderByを紹介しましたが、2つ以上の属性をソートする方法を
書いていなかったので、この記事で書いていきたいと思います。
OrderByについては、下記の記事で解説しているので、ぜひ見てください。
CHECK
-
【C# sharp Linq】Distinct、OrderBy、OrderByDescendingメソッドを解説します。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
他のLinqの記事についてはこちら
ThenBy、ThenByDescendingについて
ThenBy
2つ目以降の指定した項目を昇順にソートする。
ThenByDescending
2つ目以降の指定した項目を降順にソートする。
Linqメソッドの解説の流れ
下記の流れで説明したいと思います。
行いたい処理の例を書きます。
Linqを使用するソースコードを書いていきます。
ソースコードには、リスト、配列を使います。
定義するクラスについて
今回、紹介するためのクラスです。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 |
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; } } } |
ThenByの使い方
ThenByの使い方について、例を書いていきます。今回行いたい処理です。
行いたい処理
メーカー、名前の順で昇順に並べたい。
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 |
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")); robotlist = robotlist.OrderBy(x => x.Maker).ThenBy(x => x.Name).ToList(); foreach(var item in robotlist) { Console.WriteLine("Maker:" + item.Maker + " Name:" + item.Name); } } } } |
result
Maker:Dr Light Name:Rockman
Maker:Dr Light Name:Roll
Maker:Dr Wily Name:Airman
Maker:Dr Wily Name:Elecman
Maker:Dr Wily Name:Fireman
Maker:Dr Wily Name:Iceman
Maker:Dr Wily Name:Woodman
上記の例のように、OrderByを指定した後にThenByを指定することで、2つ目以降の項目で昇順にソートできます。
次は1つ目、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 |
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")); robotlist = robotlist.OrderByDescending(x => x.Maker).ThenByDescending(x => x.Name).ToList(); foreach(var item in robotlist) { Console.WriteLine("Maker:" + item.Maker + " Name:" + item.Name); } } } } |
result
Maker:Dr Wily Name:Woodman
Maker:Dr Wily Name:Iceman
Maker:Dr Wily Name:Fireman
Maker:Dr Wily Name:Elecman
Maker:Dr Wily Name:Airman
Maker:Dr Light Name:Roll
Maker:Dr Light Name:Rockman
降順に並べ替えるにはThenByDescendingを使用すれば、実現できます。
1つ目の項目を昇順、2つ目の項目を降順にすることも可能です。
1つ目の項目を昇順、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 |
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")); robotlist = robotlist.OrderBy(x => x.Maker).ThenByDescending(x => x.Name).ToList(); foreach(var item in robotlist) { Console.WriteLine("Maker:" + item.Maker + " Name:" + item.Name); } } } } |
result
Maker:Dr Light Name:Roll
Maker:Dr Light Name:Rockman
Maker:Dr Wily Name:Woodman
Maker:Dr Wily Name:Iceman
Maker:Dr Wily Name:Fireman
Maker:Dr Wily Name:Elecman
Maker:Dr Wily Name:Airman
昇順がThenByということだけ覚えれば、使いこなすことが出来るでしょう。
まとめ
今回もLinqメソッドの紹介記事でした。今回の取り上げたメソッドを下記に纏めます。
今回のメソッド一覧
- ThenBy
- ThenByDescending
今回は、2つ目以降のソート方法について学びました。同じように繋げていけば3つ以降のソートもできます。
結構つかう場面が多いメソッドなので、覚えておきましょう。
他のLinqの記事についてはこちら