C#の『ThenByDescending』の使い方が分からない…教えてください!
C#を学んでいるけど…
「ThenByDescendingの使い方が分からない」
このような疑問を持っていませんか?
この記事では、LINQのひとつである『ThenByDescending』について現役エンジニアが分かりやすく解説します。
まだ、C#の開発環境構築が出来ていない方はこちらを参考にしてください。
似たようなLINQで一つの要素を基準にして、降順に並べ替えるOrderByDescendingの使い方は、【C#入門】OrderByDescendingの使い方を解説【LINQ】で解説しています。
ThenByDescendingの使い方
ThenByDescendingの使い方を解説する前に、ThenByDescendingで何が出来るのかを把握しておきましょう。
ThenByDescending = 第二要素を基準に配列を降順に並べ替える
このような考え方で問題ありません。ThenByDescendingを使用すると指定した配列を2つの要素を基準にして降順に並べ替え、出力することが出来ます。
それでは、実際のコードを用いながらThenByDescendingの使い方を解説していきます。
まずは、ThenByDescendingの使い方から説明します。ThenByDescendingを使うときには以下のように記述します。
配列.OrderBy(1番目に昇順に並べ替えるキー).ThenByDescending(2番目に昇順に並べ替えるキー)
配列.OrderByDescending(1番目に降順に並べ替えるキー).ThenByDescending(2番目に昇順に並べ替えるキー)
実際のコードを用いながらThenByDescendingの使い方を解説していきます。
ThenByDescendingを使ってシーケンスを出力するときには以下のように記述します。
using System;
using System.Collections.Generic;
using System.Linq;
namespace sample
{
class LinqThenByDescending
{
private class OnePiece
{
public int Id { get; set; }
public string Name { get; set; }
public string Belong { get; set; }
}
static public void BlogLinqThenByDescending()
{
// リストを宣言・初期化
List<OnePiece> onePiecesList = new List<OnePiece>
{
new OnePiece { Id = 0, Name = "モンキー・D・ルフィ" },
new OnePiece { Id = 1, Name = "ロロノア・ゾロ" },
new OnePiece { Id = 2, Name = "ナミ" },
new OnePiece { Id = 3, Name = "ウソップ" },
new OnePiece { Id = 4, Name = "ヴィンスモーク・サンジ" },
new OnePiece { Id = 5, Name = "トニートニー・チョッパー" },
new OnePiece { Id = 6, Name = "ニコ・ロビン" },
new OnePiece { Id = 7, Name = "フランキー" },
new OnePiece { Id = 8, Name = "ブルック" },
new OnePiece { Id = 9, Name = "ジンベエ" },
new OnePiece { Id = 0, Name = "マーシャル・D・ティーチ" },
new OnePiece { Id = 1, Name = "ジーザス・バージェス" },
new OnePiece { Id = 2, Name = "シリュウ" },
new OnePiece { Id = 3, Name = "ヴァン・オーガー" },
new OnePiece { Id = 4, Name = "アバロ・ピサロ" },
new OnePiece { Id = 5, Name = "ラフィット" },
new OnePiece { Id = 6, Name = "カタリーナ・デボン" },
new OnePiece { Id = 7, Name = "サンファン・ウルフ" },
new OnePiece { Id = 8, Name = "バスコ・ショット" },
new OnePiece { Id = 9, Name = "ドクQ" },
};
int i = 0;
// ThenBy(Idで昇順に並べ替え、さらにNameをで昇順に並べ替え)の実行結果を出力
foreach (OnePiece onePiece in onePiecesList.OrderBy(x => x.Id).ThenByDescending(n => n.Name))
{
Console.WriteLine($"{i}番目:Id = {onePiece.Id}, Name = {onePiece.Name}");
i++;
}
}
}
}
サンプルコードを実行した際の出力結果は、以下のようになります。
0番目:Id = 0, Name = モンキー・D・ルフィ
1番目:Id = 0, Name = マーシャル・D・ティーチ
2番目:Id = 1, Name = ロロノア・ゾロ
3番目:Id = 1, Name = ジーザス・バージェス
4番目:Id = 2, Name = ナミ
5番目:Id = 2, Name = シリュウ
6番目:Id = 3, Name = ウソップ
7番目:Id = 3, Name = ヴァン・オーガー
8番目:Id = 4, Name = ヴィンスモーク・サンジ
9番目:Id = 4, Name = アバロ・ピサロ
10番目:Id = 5, Name = ラフィット
11番目:Id = 5, Name = トニートニー・チョッパー
12番目:Id = 6, Name = ニコ・ロビン
13番目:Id = 6, Name = カタリーナ・デボン
14番目:Id = 7, Name = フランキー
15番目:Id = 7, Name = サンファン・ウルフ
16番目:Id = 8, Name = ブルック
17番目:Id = 8, Name = バスコ・ショット
18番目:Id = 9, Name = ドクQ
19番目:Id = 9, Name = ジンベエ
サンプルコードを実行した際の出力結果は、以下のようになります。
配列.OrderBy(1番目に昇順に並べ替えるキー).ThenByDescending(2番目に昇順に並べ替えるキー)
配列.OrderByDescending(1番目に降順に並べ替えるキー).ThenByDescending(2番目に昇順に並べ替えるキー)
これを基にサンプルコードを解説すると、「配列 = onePiecesList」となります。
つまり、配列(onePiecesList)にOrderByを適用し、配列を1番目に昇順に並べ替えるキー(Id)を基準に昇順に並べ替え、ThenByDescendingを適用し、2番目に降順に並べ替えるキー(Name)を基準に降順に並べ替えた結果をを出力(Console.WriteLine)するということです。
このようにして、C#では