C#のアレイを反転します
この投稿では、C#でアレイを反転する方法について説明します。
1.使用する Array.Reverse()
方法
に 所定の位置に 指定されたアレイ内の要素の順序を逆にすると、 Array.Reverse() 方法。このソリューションは、補助アレイを使用せずに、指定されたアレイの既存の要素を上書きすることで機能します。
次の例は、アレイの値を逆にする方法を示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System; public class Example { public static void Main() { int[] array = { 2, 4, 6, 8 }; Array.Reverse(array); Console.WriteLine(String.Join(',', array)); } } /* 出力: 8,6,4,2 */ |
2.使用する Enumerable.Reverse()
方法
元のアレイの逆コピーを作成するには、 Enumerable.Reverse() 方法。基になるアレイを変更せずに、逆の順序で要素を含む新しいシーケンスを作成するだけです。次のコード例は、 Reverse()
方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; using System.Linq; public class Example { public static void Main() { int[] array = { 2, 4, 6, 8 }; int[] reverse = Enumerable.Reverse(array).ToArray(); Console.WriteLine(String.Join(',', reverse)); } } /* 出力: 8,6,4,2 */ |
3.カスタムルーチン
もう1つの解決策は、入力アレイと同じタイプとサイズの新しいアレイを作成し、ソースアレイの要素を逆の順序で入力してから、新しいアレイの内容をソースアレイにコピーすることです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
using System; public static class Extensions { public static void reverse<T>(this T[] array) { int n = array.Length; T[] aux = new T[n]; for (int i = 0; i < n; i++) { aux[n - 1 - i] = array[i]; } for (int i = 0; i < n; i++) { array[i] = aux[i]; } } } public class Example { public static void Main() { int[] array = { 2, 4, 6, 8 }; array.reverse(); Console.WriteLine(String.Join(',', array)); } } /* 出力: 8,6,4,2 */ |
上記の実装には O(n) 補助アレイ用の余分なスペース。以下に示すように、アレイをインプレースで変更することで、これを回避できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
using System; public class Example { private static void swap(int[] array, int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } public static void Main() { int[] array = { 2, 4, 6, 8 }; int n = array.Length; for (int i = 0; i < n/2; i++) { swap(array, i, n-i-1); } Console.WriteLine(String.Join(',', array)); } } /* 出力: 8,6,4,2 */ |
これで、C#のアレイを逆にすることができます。