Array.Sortとは? C#のArray.Sortは、.NET Frameworkに標準で組み込まれた配列をソートするための静的メソッドです。数値や文字列 などさまざまなデータ型の配列を、効率的に並び替えることができます。内部的にはクイックソートアルゴリズムを基盤としており、平均的な時間計算量はO(n log n)と高速な処理が可能です。
Array.Sortメソッドは元の配列を直接変更するため、新しい配列を作成する必要がなく、メモリ効率にも優れています。さらに、カスタム比較関数を使用することで独自ルールでのソートもできる、柔軟性の高いメソッドです。
【関連】C#をもっと詳しく学ぶならpaizaラーニング
基本構文 C#のArray.Sortメソッドは、ソートしたい配列を引数に渡すだけで使える、とてもシンプルな構文です。数値の配列であれば、自動的に 昇順(小さい順) に並び替えられます。以下の例では、整数 配列を昇順に並び替えています。
using System;
public class Program
{
public static void Main(string[] args)
{
int[] numbers = {5, 2, 8, 1, 9};
// ここで配列を昇順にソート
Array.Sort(numbers);
// 結果を表示
Console.WriteLine(string.Join(", ", numbers));
}
}
実行する
出力結果
1, 2, 5, 8, 9文字列配列も同様に、アルファベット順にソートできます。日本語の文字列でも文字コード順に自動的に並び替えられます。
using System;
public class Program
{
public static void Main(string[] args)
{
// 文字列配列を初期化
string[] animals = {"ライオン", "ゾウ", "イヌ", "ネコ"};
// 配列を昇順にソート (五十音順)
Array.Sort(animals);
// 配列animalsの内容を表示
Console.WriteLine(string.Join(", ", animals));
}
}
実行する
出力結果
イヌ, ゾウ, ネコ, ライオンさらに高度な使い方として、配列の一部分のみをソートすることも可能です。開始インデックスと要素数を指定することで、配列の特定範囲だけを対象にソート処理を実行できます。
using System;
public class Program
{
public static void Main(string[] args)
{
int[] partialNumbers = {1, 5, 2, 8, 3};
// 配列の指定部分をソート
Array.Sort(partialNumbers, 1, 3);
Console.WriteLine(string.Join(", ", partialNumbers));
}
}
実行する
出力結果
1, 2, 5, 8, 3実用例 ここからは、C#のArray.Sortメソッドの具体的な活用方法について、実際のコード例を交えながら詳しく解説していきます。
基本的な数値配列のソートから始まり、文字列の操作、降順ソート、部分ソート、カスタム比較関数の使用、複数キーでのソート、オブジェクト配列の処理、安定ソートの実装まで、幅広い用途に対応した8つのサンプルコードを紹介します。
各例では、実際に動作するコードと共に、その結果として表示される動物名を使った分かりやすい出力を示しています。これらの例を通じて、Array.Sortメソッドの柔軟性と実用性を理解し、実際のプログラム開発において効果的に活用できるようになるでしょう。プログラミング初心者の方でも段階的に学べるよう、シンプルなものから徐々に複雑な処理へと進んでいく構成になっています。
基本的な数値配列のソート 最もシンプルな数値配列のソート例です。ランダムに配置された数値を昇順に並び替える基本的な処理を示しています。
using System;
public class Program
{
public static void Main(string[] args)
{
int[] scores = {95, 67, 82, 91, 74};
// ソート前の配列を表示
Console.WriteLine("ソート前: " + string.Join(", ", scores));
Array.Sort(scores);
// ソート後の配列を表示
Console.WriteLine("ソート後: " + string.Join(", ", scores));
}
}
実行する
出力結果
ソート前: 95, 67, 82, 91, 74
ソート後: 67, 74, 82, 91, 95文字列配列の並び替え 動物名の配列を使用した文字列ソートの例です。文字コード順に自動的に並び替えられる様子を確認できます。
using System;
public class Program
{
public static void Main(string[] args)
{
string[] animals = {"ゾウ", "ライオン", "サル", "キリン", "トラ"};
Console.WriteLine("ソート前: " + string.Join(", ", animals));
Array.Sort(animals);
Console.WriteLine("ソート後: " + string.Join(", ", animals));
}
}
実行する
出力結果
ソート前: ゾウ, ライオン, サル, キリン, トラ
ソート後: キリン, サル, ゾウ, トラ, ライオン降順ソートの実装 Array.Reverse メソッドと組み合わせて降順ソートを実現する方法を示しています。まず昇順にソートしてから配列を反転させます。
using System;
public class Program
{
public static void Main(string[] args)
{
int[] heights = {180, 165, 175, 190, 170};
// 1. Array.Sort() で昇順(小さい順)にソート
Array.Sort(heights);
// 2. Array.Reverse() で要素の並びを反転
Array.Reverse(heights);
Console.WriteLine("降順ソート結果: " + string.Join(", ", heights));
}
}
実行する
出力結果
降順ソート結果: 190, 180, 175, 170, 165部分配列のソート処理 配列の一部分だけをソートする方法です。開始インデックス1から3個の要素のみをソート対象とし、他の部分は元のまま保持されます。
using System;
public class Program
{
public static void Main(string[] args)
{
string[] zoo = {"パンダ", "ゾウ", "キリン", "ライオン", "クマ"};
Console.WriteLine("元の配列: " + string.Join(", ", zoo));
Array.Sort(zoo, 1, 3);
Console.WriteLine("部分ソート後: " + string.Join(", ", zoo));
}
}
実行する
出力結果
元の配列: パンダ, ゾウ, キリン, ライオン, クマ
部分ソート後: パンダ, キリン, ゾウ,ライオン, クマカスタム比較子の活用 IComparerインターフェースを使用して独自のソートルールを定義する例です。文字列の長さでソートする処理を実装しています。
using System;
public class Program
{
public static void Main(string[] args)
{
string[] pets = {"イヌ", "ネコ", "ハムスター", "ウサギ"};
// 文字列 x と y の長さを比較し、短い順にソート
Array.Sort(pets, (x, y) => x.Length.CompareTo(y.Length));
Console.WriteLine("文字数順ソート: " + string.Join(", ", pets));
}
}
実行する
出力結果
文字数順ソート: イヌ, ネコ, ウサギ, ハムスター複数キーでのソート 複数の条件を組み合わせたソート処理の例です。まず文字数で並び替え、同じ文字数の場合は辞書順で並び替える複合的なソートを実装しています。
using System;
public class Program
{
public static void Main(string[] args)
{
string[] birds = {"ハト", "カラス", "スズメ", "ツル", "フクロウ"};
// 複合ソートを実行
Array.Sort(birds, (a, b) => {
// 文字列の長さで比較
int result = a.Length.CompareTo(b.Length);
// 長さが異なる場合、その結果を返す(短い順)
if (result != 0)
return result;
// 長さが同じ場合、文字列の辞書順で比較
return a.CompareTo(b);
});
Console.WriteLine("複合ソート: " + string.Join(", ", birds));
}
}
実行する
出力結果
複合ソート: ツル, ハト, カラス, スズメ, フクロウオブジェクト配列のソート カスタムクラスのオブジェクト配列をソートする方法を示します。動物の年齢をキーとしてソート処理を行う実用的な例です。
using System;
using System.Linq;// OrderBy メソッドを使うために必要
public class Program
{
public static void Main(string[] args)
{
var animals = new[] {
new { Name = "ライオン", Age = 8 },
new { Name = "ゾウ", Age = 12 },
new { Name = "サル", Age = 5 }
};
// 年齢(Age)の昇順で並び替え
var sortedAnimals = animals.OrderBy(a => a.Age).ToArray();
// 結果をカンマ区切りで出力
Console.WriteLine(string.Join(", ",
sortedAnimals.Select(a => $"{a.Name}({a.Age}歳)")));
}
}
実行する
出力結果
サル(5歳), ライオン(8歳), ゾウ(12歳)安定ソートの実装 同じ値を持つ要素の順序を保持する安定ソートの実装例です。元の順序を維持しながらソート処理を行う方法を示しています。
using System;
using System.Linq;
public class Program
{
public static void Main(string[] args)
{
string[] mammals = { "イヌ", "ネコ", "クマ", "シカ" };
// 元の並び順を保全
var indexed = mammals.Select((value, index) => new { value, index });
// 同じ値の場合は元の並び順でソート
var stable = indexed.OrderBy(x => x.value).ThenBy(x => x.index);
// ソート結果から値を取り出して配列に格納
string[] result = stable.Select(x => x.value).ToArray();
Console.WriteLine(string.Join(", ", result));
}
}
実行する
出力結果
イヌ, クマ, シカ, ネコまとめ C#のArray.Sortメソッドは、配列の並び替え処理を効率的に実行するための強力なツールです。基本的な昇順ソートから高度なカスタムソートまで、幅広い用途に対応できる柔軟性を持っています。初心者でも直感的に扱える設計でありながら、実務で求められる複雑な要件にも対応可能です。
Array.Sortの活躍する場面
データベースから取得した情報の並び替え処理での活用
ユーザーインターフェースでの一覧表示順序の制御
アルゴリズム処理における前処理としての利用
重要なポイント
元の配列を直接変更するためメモリ効率が良い
平均的にO(n log n)の高速な処理性能を実現
カスタム比較関数で独自のソートルールを適用可能
Array.Sortメソッドをマスターすることで、データ処理の効率が大幅に向上し、より実用的なアプリケーション開発が可能になります。基本的な使い方から始めて、段階的に高度な機能を覚えていくことで、プログラミングスキルの向上にもつながります。
実務では、ソート処理は頻繁に使用される重要な機能の一つです。この記事で紹介した様々なパターンを参考にして、実際の開発で効果的に活用してください。
レベルを更に上げたい方はpaizaプログラミングスキルチェックへ