配列の「並べ替え(ソート)」
C#で配列(Array)に格納されたデータを扱う際、それらの要素を特定の順序、特に「昇順」(小さいものから大きいものへ、またはアルファベット順)に並べ替えたい(ソートしたい)という要求は非常に一般的です。
例えば、int型のスコア配列を点数が低い順に並べたり、string型の名前配列を辞書順に整列させたりする場合です。
System.Arrayクラスは、この並べ替え操作を効率的に行うためのSortという静的メソッドを提供しています。
Array.Sort(Array array) メソッド
Array.Sortメソッドは、指定された1次元配列の要素を、その型のデフォルトの比較ルール(intなら数値の大小、stringなら辞書順)に従って昇順に並べ替えます。
重要な特性:インプレース(In-Place)操作
Array.Sortは、Array.Reverseと同様に、**インプレース(In-Place)**で動作します。
これは、Sortメソッドが新しい配列を生成して返すのではなく、引数として渡された元の配列インスタンス自体を直接変更する(中身を書き換える)ことを意味します。このメソッドの戻り値はvoid(何も返さない)です。
コード例1:int配列(数値)の昇順ソート
int型の配列(例: [150, 85, 100])を、数値が小さい順(昇順)に並べ替える例です。
using System;
public class ArraySortNumericExample
{
public static void Main()
{
// 1. 元の配列を定義
int[] scores = { 150, 85, 100, 42, 200 };
Console.WriteLine("--- 実行前 (数値) ---");
PrintArray(scores); // [150] [85] [100] [42] [200]
// 2. Array.Sort を呼び出し (元の配列が変更される)
Array.Sort(scores);
Console.WriteLine("\n--- 実行後 (昇順) ---");
PrintArray(scores); // [42] [85] [100] [150] [200]
}
// 配列の要素を出力するヘルパーメソッド
private static void PrintArray(int[] arr)
{
foreach (var item in arr)
{
Console.Write($"[{item}] ");
}
Console.WriteLine();
}
}
出力結果:
--- 実行前 (数値) ---
[150] [85] [100] [42] [200]
--- 実行後 (昇順) ---
[42] [85] [100] [150] [200]
コード例2:string配列(文字列)の昇順ソート
string型の配列をソートすると、辞書順(アルファベット順)に並べ替えられます。
using System;
public class ArraySortStringExample
{
public static void Main()
{
// 1. 元の文字列配列を定義
string[] categories = { "Delta", "Alpha", "Echo", "Charlie", "Bravo" };
Console.WriteLine("--- 実行前 (文字列) ---");
PrintArray(categories);
// 2. Array.Sort を呼び出し
Array.Sort(categories);
Console.WriteLine("\n--- 実行後 (アルファベット順) ---");
PrintArray(categories);
}
// 配列の要素を出力するヘルパーメソッド
private static void PrintArray(string[] arr)
{
foreach (var item in arr)
{
Console.WriteLine(item);
}
}
}
出力結果:
--- 実行前 (文字列) ---
Delta
Alpha
Echo
Charlie
Bravo
--- 実行後 (アルファベット順) ---
Alpha
Bravo
Charlie
Delta
Echo
(注意: デフォルトのSortは、大文字と小文字を区別します。通常、大文字が小文字よりも先に並べられます。例: “Bravo” -> “alpha”)
補足:降順(大きい順)に並べ替える方法
Array.Sortメソッドは、それ単体では昇順にしか並べ替えられません。
もし降順(大きい順、または辞書順の逆)に並べ替えたい場合は、Array.Sortを実行した後で、Array.Reverse(配列を逆順にする)メソッドを呼び出すのが最も一般的なテクニックです。
コード例3:降順ソート(Sort + Reverse)
using System;
public class ArraySortDescendingExample
{
public static void Main()
{
int[] scores = { 150, 85, 100, 42, 200 };
Console.WriteLine("--- 実行前 ---");
PrintArray(scores);
// 1. まず昇順にソートする (42, 85, 100, 150, 200)
Array.Sort(scores);
// 2. 昇順になった配列を、さらに逆順にする
Array.Reverse(scores);
Console.WriteLine("\n--- 実行後 (降順) ---");
PrintArray(scores);
}
private static void PrintArray(int[] arr)
{
foreach (var item in arr) Console.Write($"[{item}] ");
Console.WriteLine();
}
}
出力結果:
--- 実行前 ---
[150] [85] [100] [42] [200]
--- 実行後 (降順) ---
[200] [150] [100] [85] [42]
まとめ
Array.Sort(array)メソッドは、C#で配列の要素を「インプレース(元の配列を変更)」で「昇順」に並べ替えるための、最も基本的な静的メソッドです。
int、string、DateTimeなど、比較可能な多くの型に対して機能します。降順にソートしたい場合は、Array.Sortの後にArray.Reverseを組み合わせて使用します。
