配列の順序を反転させたい時
C#で配列(Array)を扱う際、コレクションに格納されている要素の順序を完全に逆にしたい場合があります。例えば、時系列データの順序(古い順 -> 新しい順)を反転させたり、ソート(並べ替え)結果を昇順から降順に変更したりするケースです。
forループを使って手動で要素を入れ替えることも可能ですが、C#のSystem.Arrayクラスには、この操作を簡単かつ効率的に行うためのReverseという静的メソッドが用意されています。
Array.Reverse(Array array) メソッド
Array.Reverseメソッドは、指定された1次元配列の要素の順序を完全に反転させます。
重要な特性:インプレース(In-Place)操作
Array.Reverseを使用する上で最も重要な点は、このメソッドが**インプレース(In-Place)**で動作する、ということです。
これは、Array.Reverseが新しい配列を生成して返すのではなく、引数として渡された元の配列インスタンス自体を直接変更することを意味します。このメソッドの戻り値はvoid(何も返さない)です。
int[] numbers = { 10, 20, 30 };
// Array.Reverse は「numbers」配列の中身を直接書き換える
Array.Reverse(numbers);
// numbers の中身は { 30, 20, 10 } に変わっている
コード例1:int配列(値型)の逆順
int型の配列([100, 200, 300, 400, 500])の順序をArray.Reverseで反転させる例です。
using System;
public class ArrayReverseValueTypeExample
{
public static void Main()
{
// 1. 元の配列を定義
int[] dataPoints = { 100, 200, 300, 400, 500 };
Console.WriteLine("--- 実行前 ---");
PrintArray(dataPoints); // [100] [200] [300] [400] [500]
// 2. Array.Reverse を呼び出し (元の配列が変更される)
Array.Reverse(dataPoints);
Console.WriteLine("\n--- 実行後 ---");
PrintArray(dataPoints); // [500] [400] [300] [200] [100]
}
// 配列の要素を出力するヘルパーメソッド
private static void PrintArray(int[] arr)
{
foreach (var item in arr)
{
Console.Write($"[{item}] ");
}
Console.WriteLine();
}
}
出力結果:
--- 実行前 ---
[100] [200] [300] [400] [500]
--- 実行後 ---
[500] [400] [300] [200] [100]
コード例2:string配列(参照型)の逆順
Array.Reverseは、intのような値型だけでなく、stringなどの参照型の配列に対しても同様に機能します。
using System;
public class ArrayReverseReferenceTypeExample
{
public static void Main()
{
// 1. 元の文字列配列を定義
string[] steps = { "Step 1: Initialize", "Step 2: Process", "Step 3: Complete" };
Console.WriteLine("--- 実行前 ---");
PrintArray(steps);
// 2. Array.Reverse を呼び出し (元の配列が変更される)
Array.Reverse(steps);
Console.WriteLine("\n--- 実行後 ---");
PrintArray(steps);
}
// 配列の要素を出力するヘルパーメソッド
private static void PrintArray(string[] arr)
{
foreach (var item in arr)
{
Console.WriteLine(item);
}
}
}
出力結果:
--- 実行前 ---
Step 1: Initialize
Step 2: Process
Step 3: Complete
--- 実行後 ---
Step 3: Complete
Step 2: Process
Step 1: Initialize
補足:配列の一部分だけを逆順にする
Array.Reverseには、配列の特定範囲(インデックスと長さ)だけを逆順にするオーバーロードも存在します。
Array.Reverse(Array array, int index, int length)
index: 逆順を開始するインデックス。length: 逆順にする要素の数。
int[] data = { 10, 20, 30, 40, 50 };
// インデックス 1 (20) から 3 要素 (20, 30, 40) だけを逆順にする
Array.Reverse(data, 1, 3);
// data は { 10, 40, 30, 20, 50 } になる
まとめ
Array.Reverse(array)メソッドは、C#で配列の要素全体を逆順にするための最も標準的で効率的な方法です。
このメソッドは「インプレース(in-place)」で動作し、元の配列インスタンスを直接変更する(破壊的メソッドである)という点を理解しておくことが重要です。新しい配列を生成して結果を返したい場合は、LINQのReverse()メソッド(array.Reverse().ToArray())など、別の手法を検討する必要があります。
