C#でArrayList全体または指定範囲の要素の順序を逆にする方法
C#のArrayListクラスには、要素の順序を反転させるためのReverse()メソッドが用意されています。このメソッドには2つの使い方があります。
- Reverse() … 引数なしで呼び出すと、リスト内のすべての要素の順序が逆になります。
- Reverse(int index, int count) … 開始インデックスと要素数を指定すると、その範囲だけが反転されます。
以下、それぞれの使い方をサンプルコードと実行結果とともに見ていきましょう。
例1:ArrayList全体の要素を逆順にする
まずは、引数なしのReverse()メソッドでリスト全体を反転させる例です。
using System;
using System.Collections;
public class Demo {
public static void Main(String[] args) {
ArrayList list1 = new ArrayList();
list1.Add("A");
list1.Add("B");
list1.Add("C");
list1.Add("D");
list1.Add("E");
list1.Add("F");
list1.Add("G");
list1.Add("H");
list1.Add("I");
Console.WriteLine("ArrayList1の要素...");
foreach (string res in list1) {
Console.WriteLine(res);
}
ArrayList list2 = new ArrayList();
list2.Add("A");
list2.Add("B");
list2.Add("C");
list2.Add("D");
list2.Add("E");
list2.Add("F");
list2.Add("G");
list2.Add("H");
list2.Add("I");
Console.WriteLine("ArrayList2の要素...");
foreach (string res in list2) {
Console.WriteLine(res);
}
ArrayList list3 = new ArrayList();
Console.WriteLine("ArrayList3の現在の容量: " + list3.Capacity);
list3 = list2;
Console.WriteLine("ArrayList3の現在の容量(更新後): " + list3.Capacity);
Console.WriteLine("ArrayList3はArrayList2と等しいか? = " + list3.Equals(list2));
Console.WriteLine("ArrayList2の要素数 = " + list2.Count);
list2.Reverse();
Console.WriteLine("ArrayList2の要素...反転後");
foreach (string res in list2) {
Console.WriteLine(res);
}
}
}実行結果
上記のコードを実行すると、次のような出力が得られます。
ArrayList1の要素... A B C D E F G H I ArrayList2の要素... A B C D E F G H I ArrayList3の現在の容量: 0 ArrayList3の現在の容量(更新後): 16 ArrayList3はArrayList2と等しいか? = True ArrayList2の要素数 = 9 ArrayList2の要素...反転後 I H G F E D C B A
この例では、list2.Reverse()を呼び出すことで、AからIまで並んでいた要素がIからAへと完全に反転していることが確認できます。なお、参考としてCapacityプロパティの挙動も表示しています。空のArrayListの初期容量は0ですが、別のリストを代入すると容量も引き継がれる点に注目してください。
例2:指定した範囲の要素だけを逆順にする
次に、Reverse(int index, int count)を使って、特定の範囲のみを反転させる例を見てみましょう。ここでは「インデックス1から始まる3つの要素」を反転しています。
using System;
using System.Collections;
public class Demo {
public static void Main(String[] args) {
ArrayList list = new ArrayList();
list.Add("Andy");
list.Add("Gary");
list.Add("Katie");
list.Add("Amy");
Console.WriteLine("ArrayListの要素...");
foreach (string res in list) {
Console.WriteLine(res);
}
string[] strArr = { "John", "Jacob" };
list.AddRange(strArr);
Console.WriteLine("ArrayListの要素...更新後");
foreach(String str in list) {
Console.WriteLine(str);
}
list.Reverse(1, 3);
Console.WriteLine("ArrayListの要素...インデックス1から3要素を反転");
foreach (string res in list) {
Console.WriteLine(res);
}
}
}実行結果
上記のコードを実行すると、次のような出力が得られます。
ArrayListの要素... Andy Gary Katie Amy ArrayListの要素...更新後 Andy Gary Katie Amy John Jacob ArrayListの要素...インデックス1から3要素を反転 Andy Amy Katie Gary John Jacob
この例では、まずAddRange()メソッドで配列の要素をリスト末尾に追加しています。その後、list.Reverse(1, 3)を実行すると、インデックス1(Gary)から数えて3要素分、つまり「Gary・Katie・Amy」が「Amy・Katie・Gary」に反転されます。先頭の「Andy」と末尾の「John」「Jacob」は元の位置のまま変化していない点に注目してください。
まとめ
Reverse():ArrayListの全要素の順序を反転します。Reverse(index, count):指定した開始インデックスからcount個の要素だけを反転します。- どちらの場合も元のリスト自体が書き換えられる(破壊的操作である)点に注意しましょう。
-
C#でリストの末尾3つの要素を逆順に表示する方法
C#のリスト(List)から末尾の3つの要素を取り出すには Take() メソッド を使用し、さらに順序を反転させるには Reverse() メソッド を組み合わせます。 リストの宣言と要素の追加 まず、リストを宣言し、要素を追加します。 List<string> myList = new List<string>(); myList.Add(One); myList.Add(Two); myList.Add(Three); myList.Add(Four); 末尾3つの要素を逆順で取得する 次に、Reverse() メソッドでリスト全体を逆順に並べ替えた後、Take
-
C#でListの要素範囲を取得する方法:GetRange()メソッドの使い方
C#のListで特定の範囲の要素を取得するには、GetRange() メソッドを使用します。このメソッドは、指定したインデックス位置から指定した数の要素を取り出し、新しいリストとして返します。 GetRange() メソッドの基本構文 public List<T> GetRange(int index, int count); index:取得を開始する要素のインデックス(0から始まります) count:取得する要素の数 リストの作成と要素の追加 まず、リストを作成して要素を追加します。 List<int> arr1 = new List<int>();