C# で配列を反転する

Syed Hassan Sabeeh Kazmi 2023年10月12日
  1. C# で配列を逆にするアルゴリズムを書く
  2. C#Array.Reverse() メソッドを使用して配列を反転する
  3. C#Enumerable.Reverse() メソッドを使用して配列を反転する
  4. まとめ
C# で配列を反転する

このチュートリアルでは、定義済みのメソッドを含め、C# で配列を逆にするさまざまな方法について説明します。 通常、配列 temp = arr[0] の最初のインデックス値を保存するには、temp 変数を作成する必要があります。arr[0] = arr[1]、そして arr[1]temp 値を格納します。

これは、短い配列を逆にする一般的な概念であり、ループは C# で大きな配列に対する逆の操作を処理するのに役立ちます。

C# で配列を逆にするアルゴリズムを書く

スワッピングの技術は、C# で配列を反転する際に非常に効率的です。 startIndexendIndex という名前の変数のペアを定義し、それぞれの値を 0n-1 で初期化することが重要です。ここで、n は配列の長さを表します。

for ループ。 startIndex 値が endIndex 値よりも小さくなるまでこの手順を繰り返し、配列を反転配列として出力します。

値を交換するだけで、補助スペースを使用せずに配列を逆にする簡単な方法です。 したがって、逆配列の時間計算量は O(n) であり、その空間計算量は O(1) です。

配列 arr.Length / 2 の前半だけ反復する必要があります。 配列全体を反復処理すると、arr.Length は、配列が 2 回反転され、元の配列と同じ結果が出力されることを意味します。

using System;

public class reverseArrayAlgo {
  public static void Main(string[] args) {
    // create an array containing five integer values
    int[] expArray = { 4, 5, 6, 7, 8 };

    // display the original array
    Console.Write("The elements of the original array: ");
    for (int rep = 0; rep < expArray.Length; rep++) {
      Console.Write(expArray[rep] + " ");
    }

    // call a method that contains the algorithm to reverse the `expArray` array
    arrayReverse(expArray, 0, (expArray.Length - 1));

    // display the reversed array
    Console.Write("\r\nThe elements of the reversed array: ");
    for (int repo = 0; repo < expArray.Length; repo++) {
      Console.Write(expArray[repo] + " ");
    }
  }

  // create a method to reverse an array
  public static void arrayReverse(int[] expArray, int startIndex, int endIndex) {
    while (startIndex < endIndex) {
      int objTemp = expArray[startIndex];
      expArray[startIndex] = expArray[endIndex];
      expArray[endIndex] = objTemp;
      startIndex++;
      endIndex--;
    }
  }
}

出力:

The elements of the original array: 4 5 6 7 8

The elements of the reversed array: 8 7 6 5 4

C#Array.Reverse() メソッドを使用して配列を反転する

これは、System 名前空間の Array クラスに属し、C# で配列を逆にする効率的な方法です。 出力として反転された配列を受け取ることができるように、1 次元配列を引数として受け取ってその形式を逆にすることで、1 次元配列を処理します。

新しい配列を作成する代わりに、元の配列を変更します。 System.Linq 名前空間で利用可能な元の配列の変更に満足できない場合は、Enumerable.Reverse() メソッドを使用できます。

配列型の静的メソッドとして、指定された配列の既存の要素または値を補助スペースまたは配列なしで上書きすることによって機能します。

配列が null または多次元の場合、複数の種類の例外がスローされます。 インデックスが配列の下限より小さいか、長さが 0 より小さいか、またはインデックスと長さが配列内の有効な範囲を指定していません。 このメソッドの呼び出し後、expArray[repo] (expArray は配列を表し、repo は配列内のインデックス) の要素は expArray[i] に移動します。ここで、i は次の値に等しくなります。

(myArray.Length + myArray.GetLowerBound(0)) - (i - myArray.GetLowerBound(0)) - 1

このメソッドは O(n) 演算であり、n は配列の長さを表します。 このメソッドに渡されるパラメーター値の型は System.Array で、これは反転する 1 次元配列を表します。

コード例:

using System;

public class reverseArrayAlgo {
  public static void Main(string[] args) {
    // create an array containing five integer values
    int[] expArray = { 4, 5, 6, 7, 8 };

    // display the original array
    Console.Write("The elements of the original array: ");
    for (int rep = 0; rep < expArray.Length; rep++) {
      Console.Write(expArray[rep] + " ");
    }

    // call the `Array.Reverse()` method to reverse the `expArray` array by passing it through the
    // method's parameter
    Array.Reverse(expArray);

    // display the reversed array
    Console.Write("\r\nThe elements of the reversed array: ");
    for (int repo = 0; repo < expArray.Length; repo++) {
      Console.Write(expArray[repo] + " ");
    }
  }
}

出力:

The elements of the original array: 4 5 6 7 8

The elements of the reversed array: 8 7 6 5 4

C#Enumerable.Reverse() メソッドを使用して配列を反転する

逆の順序で要素の新しいシーケンスを作成することにより、元の配列または基になる配列を変更せずに、配列内の要素の順序を逆にする便利な方法です。 Enumerable.Reverse() メソッドを呼び出して、配列の要素の順序を逆にします。これは、他のどのメソッドやカスタム逆アルゴリズムよりも便利で読みやすくなっています。

System.Linq 名前空間に属し、要素が入力シーケンスに逆順で対応するシーケンスを返します。 逆の操作を実行するために必要なすべての情報を格納するその値は、遅延実行によって実装された即時の戻りオブジェクトです。

foreach を使用するか、Getnumerator メソッドを直接呼び出して、このメソッドを完全に実行するためにオブジェクトを列挙できます。 OrderBy とは異なり、並べ替えメソッドとしての Enumerable.Array() は、順序を決定する際に実際の値を考慮しません。

コード例:

using System;
using System.Linq;

public class reverseArrayAlgo {
  public static void Main(string[] args) {
    // create an array containing five integer values
    int[] expArray = { 4, 5, 6, 7, 8 };

    // display the original array
    Console.Write("The elements of the original array: ");
    for (int rep = 0; rep < expArray.Length; rep++) {
      Console.Write(expArray[rep] + " ");
    }

    // call the `Enumerable.Reverse()` method to reverse the `expArray` array by passing it through
    // the method's parameter
    int[] reverse = Enumerable.Reverse(expArray).ToArray();

    // another alternative to display the reverse array
    // Console.WriteLine(String.Join(',', reverse));

    // display the reversed array
    Console.Write("\r\nThe elements of the reversed array: ");
    for (int repo = 0; repo < reverse.Length; repo++) {
      Console.Write(reverse[repo] + " ");
    }
  }
}

出力:

The elements of the original array: 4 5 6 7 8

The elements of the reversed array: 8 7 6 5 4

まとめ

このチュートリアルでは、C# で配列を逆にする 3つの方法について説明しました。 このチュートリアルには、深く理解できるように、実行可能な C# コードの簡略化および最適化された例が含まれています。

すべてのリバース メソッドには、他にはない独自のプロパティと利点があります。 ニーズに最適なものを選択してください。

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub

関連記事 - Csharp Array