C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
生徒
「LINQでデータを並び替える方法ってありますか?」
先生
「はい、LINQのOrderByメソッドを使えば、簡単にデータを並び替えることができますよ。」
生徒
「どうやって使うんですか?」
先生
「それでは、基本的な使い方から見ていきましょう!」
1. OrderByとは?
C#のLINQにあるOrderByは、データを昇順に並び替えるためのメソッドです。昇順とは、小さい値から大きい値へ、またはあいうえお順のように並べることを指します。例えば、数字なら1、2、3の順番、文字列なら「あ、い、う」の順番に整理されます。
OrderByを使うと、配列やリストなどのコレクションに入っているデータを、指定した条件で簡単に整理できます。プログラムでデータを扱うとき、見やすく並べることはとても大切です。
2. OrderByの基本的な使い方
まずは、数値の配列を並び替える簡単な例を見てみましょう。数値データを小さい順に並べるコードです。
using System;
using System.Linq;
class Program
{
static void Main()
{
int[] numbers = { 5, 2, 8, 1, 9, 3 };
var sortedNumbers = numbers.OrderBy(n => n);
foreach (var num in sortedNumbers)
{
Console.WriteLine(num);
}
}
}
実行結果は次のようになります。
1
2
3
5
8
9
このコードでは、バラバラに並んでいた数字が小さい順にきれいに整理されました。OrderBy(n => n)という部分が並び替えの指示を出している箇所です。
3. OrderByの書き方を詳しく解説
OrderByメソッドは、並び替えの基準を指定する必要があります。基本的な書き方は次の通りです。
var 結果 = データ.OrderBy(要素 => 並び替えの基準);
ここで使われている=>という記号は、ラムダ式と呼ばれるものです。ラムダ式は、簡単に言うと「このデータをどう処理するか」を短く書く方法です。n => nは「各要素nをそのまま使って並び替える」という意味になります。
数値の場合は数値の大きさで、文字列の場合はあいうえお順やアルファベット順で自動的に並び替えられます。
4. 文字列をOrderByで並び替える
次は、文字列のリストを五十音順に並び替えてみましょう。名前のリストを整理する例です。
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<string> fruits = new List<string> { "りんご", "バナナ", "みかん", "いちご" };
var sortedFruits = fruits.OrderBy(f => f);
foreach (var fruit in sortedFruits)
{
Console.WriteLine(fruit);
}
}
}
実行結果は次のようになります。
いちご
バナナ
みかん
りんご
文字列の場合も、OrderByを使うだけで自動的に五十音順に整理されます。カタカナやひらがなが混ざっていても、きちんと並び替えてくれます。
5. OrderByDescendingで降順に並び替える
今までは小さい順に並べてきましたが、逆に大きい順に並べたい場合もあります。そんなときはOrderByDescendingメソッドを使います。Descendingは「降順」という意味で、大きい値から小さい値へと並べることを指します。
using System;
using System.Linq;
class Program
{
static void Main()
{
int[] scores = { 85, 92, 78, 95, 88 };
var sortedScores = scores.OrderByDescending(s => s);
foreach (var score in sortedScores)
{
Console.WriteLine(score);
}
}
}
実行結果は次のようになります。
95
92
88
85
78
テストの点数などは、高い順に見たいことが多いですよね。そういった場合にOrderByDescendingが便利です。
6. オブジェクトのプロパティで並び替える
実際のプログラムでは、単純な数値や文字列だけでなく、複数の情報を持ったオブジェクトを扱うことが多いです。例えば、商品の情報には名前と価格があります。こういったオブジェクトも、特定のプロパティを基準に並び替えることができます。
using System;
using System.Linq;
using System.Collections.Generic;
class Product
{
public string Name { get; set; }
public int Price { get; set; }
}
class Program
{
static void Main()
{
List<Product> products = new List<Product>
{
new Product { Name = "ノート", Price = 150 },
new Product { Name = "ペン", Price = 100 },
new Product { Name = "消しゴム", Price = 80 }
};
var sortedProducts = products.OrderBy(p => p.Price);
foreach (var product in sortedProducts)
{
Console.WriteLine($"{product.Name}: {product.Price}円");
}
}
}
実行結果は次のようになります。
消しゴム: 80円
ペン: 100円
ノート: 150円
この例では、OrderBy(p => p.Price)と書くことで、価格の安い順に商品を並び替えています。p.Priceという部分が「価格プロパティを基準にする」という指示になっています。
7. ThenByで複数の条件で並び替える
同じ値が複数ある場合、さらに別の条件で並び替えたいことがあります。例えば、価格が同じ商品があったら、名前順に並べるといった具合です。そんなときはThenByメソッドを使います。
using System;
using System.Linq;
using System.Collections.Generic;
class Student
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
List<Student> students = new List<Student>
{
new Student { Name = "田中", Age = 20 },
new Student { Name = "佐藤", Age = 20 },
new Student { Name = "鈴木", Age = 19 }
};
var sortedStudents = students.OrderBy(s => s.Age).ThenBy(s => s.Name);
foreach (var student in sortedStudents)
{
Console.WriteLine($"{student.Name}: {student.Age}歳");
}
}
}
実行結果は次のようになります。
鈴木: 19歳
佐藤: 20歳
田中: 20歳
まず年齢で並び替えられ、同じ年齢の場合は名前順になっています。このように、OrderByとThenByを組み合わせることで、より細かい並び替えが可能になります。
8. ToListやToArrayで結果を保存する
OrderByの結果は、そのままでは一時的なものです。並び替えた結果を後で何度も使いたい場合は、ToList()やToArray()を使ってリストや配列に変換しておくと便利です。
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
static void Main()
{
int[] numbers = { 7, 3, 9, 1, 5 };
List<int> sortedList = numbers.OrderBy(n => n).ToList();
Console.WriteLine("並び替え後のリスト:");
foreach (var num in sortedList)
{
Console.WriteLine(num);
}
}
}
ToList()を使うことで、並び替えた結果がリストとして保存され、何度でも使えるようになります。プログラムの中で繰り返し参照する場合は、この方法を使いましょう。
まとめ
ここまで、C#のLINQで使用できる並び替え機能であるOrderByについて詳しく解説してきました。OrderByは、配列やリストなどのコレクションデータを簡単に並び替えることができる非常に便利な機能です。プログラム開発では、データを整理して表示する場面が多くあります。例えば商品の価格順に並べたり、名前順に一覧表示したり、成績順に結果を並び替えたりする処理は、実際のシステム開発でも頻繁に登場します。
C#のLINQを使うことで、これらの並び替え処理をとてもシンプルに書くことができます。特にOrderByメソッドを使えば、昇順の並び替えを一行のコードで実装できます。従来のプログラムでは並び替えアルゴリズムを自分で実装する必要がありましたが、LINQを使えばそのような複雑な処理を書かなくても、分かりやすく安全にソート処理を行うことができます。
OrderByの基本構文は、コレクションデータに対してOrderByメソッドを呼び出し、ラムダ式で並び替えの基準を指定する形になります。ラムダ式は、データの要素をどの値で比較するかを指定するために使われます。数値なら数値の大小、文字列なら五十音順、オブジェクトなら特定のプロパティなど、さまざまな条件を指定することができます。
また、OrderByDescendingを使用すれば降順の並び替えも簡単に実装できます。テストの点数ランキングや売上ランキングなど、大きい値から並べたい場合にはこのメソッドが便利です。さらにThenByを組み合わせることで、複数条件による並び替えも可能になります。例えば年齢で並び替えたあとに名前順で並び替えるといった処理も、シンプルなコードで実装できます。
実際のシステム開発では、単純な数値データだけでなく、商品情報やユーザー情報のように複数のプロパティを持つオブジェクトを扱うことが多くあります。その場合でもLINQのOrderByを使えば、特定のプロパティを基準に並び替えができます。例えば価格順、名前順、年齢順など、目的に応じて柔軟に並び替えることが可能です。
また、OrderByの結果はIEnumerableとして返されるため、ToListやToArrayを使ってリストや配列に変換することで、後から何度でも利用することができます。これは実務のプログラムでもよく使われるテクニックであり、並び替えたデータを保存して再利用する際に役立ちます。
LINQのOrderByは、C#のデータ処理を効率的に行うために非常に重要な機能です。配列の並び替え、リストのソート、オブジェクトのプロパティによる並び替え、複数条件の並び替えなど、さまざまな場面で活用できます。C#のプログラミングを学ぶ上で、LINQとOrderByの使い方を理解しておくことはとても大切です。
ここで、OrderByを使った簡単なまとめのサンプルプログラムを確認してみましょう。数値の並び替えと降順の並び替えの両方を確認できるコードです。
using System;
using System.Linq;
class Program
{
static void Main()
{
int[] numbers = { 12, 5, 30, 8, 21 };
var ascending = numbers.OrderBy(n => n);
var descending = numbers.OrderByDescending(n => n);
Console.WriteLine("昇順の並び替え");
foreach (var n in ascending)
{
Console.WriteLine(n);
}
Console.WriteLine("降順の並び替え");
foreach (var n in descending)
{
Console.WriteLine(n);
}
}
}
実行結果は次のようになります。
昇順の並び替え
5
8
12
21
30
降順の並び替え
30
21
12
8
5
このように、OrderByとOrderByDescendingを使うことで、C#のLINQを活用した柔軟な並び替え処理を実装することができます。データ処理の基本として、配列のソート、リストの並び替え、オブジェクトの並び替えなどは非常に重要な技術です。LINQのOrderByを理解することで、より読みやすく保守しやすいプログラムを書くことができるようになります。
生徒
「今回の内容を振り返ると、C#のLINQにあるOrderByを使うと、配列やリストのデータを簡単に並び替えることができると分かりました。」
先生
「その通りです。C#のLINQはデータ操作をとても簡単にしてくれます。OrderByは特にデータ整理の基本となるメソッドです。」
生徒
「OrderByは昇順の並び替えで、OrderByDescendingは降順の並び替えでしたよね。」
先生
「そうです。そしてThenByを使うことで、複数の条件で並び替えることもできます。例えば年齢順に並べたあとに名前順で並び替えるような処理も可能です。」
生徒
「オブジェクトのプロパティでも並び替えできるのは便利ですね。商品価格やユーザー年齢など、実際のアプリケーションでも使えそうです。」
先生
「その通りです。C#のLINQとOrderByを理解しておくと、データ処理の多くの場面で役立ちます。リストの並び替え、ランキング表示、検索結果の整理など、実務でも頻繁に使用される重要な技術です。」
生徒
「LINQは難しそうだと思っていましたが、OrderByから学ぶと理解しやすいですね。」
先生
「はい。まずはOrderByの基本的な使い方をしっかり覚えて、ThenByやWhereなど他のLINQメソッドも少しずつ学んでいくと、C#のデータ処理がとても得意になりますよ。」