DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

配列やコレクションの要素の順番を反転(逆に)する

例えば { 3, 6, 5 } という配列があった時、この配列の要素の順番を反転(逆に)して、{ 5, 6, 3 } にする方法を紹介します。

なおここで紹介する方法は順番を反転させるだけで、要素を降順に並び替える方法ではありません(すでに要素が昇順で並んでいるならば、こちらの方法で反転させて、降順にすることはできます)。要素を降順(あるいは、昇順)に並び替える方法は、「配列やコレクション内の要素を並び替える」をご覧ください。

Array.Reverseや、コレクションのReverseメソッドを使用する

配列の反転であれば、Array.Reverseメソッドを使ってできます。

VB.NET
コードを隠すコードを選択
'基になる配列
Dim ary As Integer() = New Integer() {3, 6, 5}

'要素の順番を反転させる
Array.Reverse(ary)

'ary は { 5, 6, 3 } となる
C#
コードを隠すコードを選択
//基になる配列
int[] ary = new int[] { 3, 6, 5 };

//要素の順番を反転させる
Array.Reverse(ary);

//ary は { 5, 6, 3 } となる

また、ArrayListやList<T>などのコレクションにもReverseメソッドがあり、これを使用して反転させることができます。

VB.NET
コードを隠すコードを選択
'Imports System.Collections.Generic

'基になるList
Dim lst As New List(Of Integer)() From {3, 6, 5}

'要素の順番を反転させる
lst.Reverse()

'lst は { 5, 6, 3 } となる
C#
コードを隠すコードを選択
//using System.Collections.Generic;

//基になるList
List<int> lst = new List<int> { 3, 6, 5 };

//要素の順番を反転させる
lst.Reverse();

//lst は { 5, 6, 3 } となる
補足:ArrayやコレクションのReverseメソッドは、反転させる要素のインデックス範囲(開始位置と長さ)を指定して実行することもできます。

Enumerable.Reverseメソッドを使用する

.NET Framework 3.5からは、Enumerable.Reverseメソッドを使用して配列やコレクションを反転することができます。この方法では反転されたシーケンスが返されますので、反転する配列やコレクション自身に変化はありません。

VB.NET
コードを隠すコードを選択
'Imports System.Linq

'基になる配列
Dim ary As Integer() = New Integer() {3, 6, 5}

'要素の順番を反転させたシーケンスから、配列を作成する
Dim reversedAry As Integer() = ary.Reverse().ToArray()

'reversedAry は { 5, 6, 3 } となる
C#
コードを隠すコードを選択
//using System.Linq;

//基になる配列
int[] ary = new int[] { 3, 6, 5 };

//要素の順番を反転させたシーケンスから、配列を作成する
int[] reversedAry = ary.Reverse().ToArray();

//reversedAry は { 5, 6, 3 } となる

ListやArrayListなどのコレクションの場合は、普通にReverseメソッドを呼び出そうとすると、前に説明したReverseメソッドを呼び出します。よってEnumerable.Reverseメソッドを呼び出す場合は、直接Enumerable.Reverseメソッドを呼び出すか、コレクションをIEnumerableにキャストして呼び出すか、などとします。

VB.NET
コードを隠すコードを選択
'Imports System.Collections.Generic
'Imports System.Linq

'基になるList
Dim lst As New List(Of Integer)() From {3, 6, 5}

'要素の順番を反転させたシーケンスから、Listを作成する
Dim reversedList As List(Of Integer) = Enumerable.Reverse(lst).ToList()
'次のようにもできる
'Dim reversedList As List(Of Integer) =
'    DirectCast(lst, IEnumerable(Of Integer)).Reverse().ToList()

'reversedList は { 5, 6, 3 } となる
C#
コードを隠すコードを選択
//using System.Collections.Generic;
//using System.Linq;

//基になるList
List<int> lst = new List<int> { 3, 6, 5 };

//要素の順番を反転させたシーケンスから、Listを作成する
List<int> reversedList = Enumerable.Reverse(lst).ToList();
//次のようにもできる
//List<int> reversedList = ((IEnumerable<int>)lst).Reverse().ToList();

//reversedList は { 5, 6, 3 } となる

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。