C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でStack(スタック)を配列にコピーする方法

C#では、CopyToメソッドを使用することで、Stack(スタック)のすべての要素を既存の配列へ簡単にコピーできます。本記事では、具体的なコード例と実行結果をもとに、基本的な使い方からコピー開始位置を指定する方法までをわかりやすく解説します。

CopyToメソッドの基本

Stack<T>クラスのCopyTo(T[] array, int arrayIndex)メソッドは、スタック内の要素を指定した配列にコピーします。第1引数にはコピー先の配列、第2引数にはコピーを開始する配列のインデックスを指定します。スタックはLIFO(Last In First Out:後入れ先出し)構造であるため、要素は最後に追加されたものから順番に配列へ格納される点に注意してください。

例1:スタックの全要素を配列にコピーする

まずは、スタックの内容をそのまま配列へコピーする基本例を見てみましょう。

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      Stack<int> stack = new Stack<int>();
      stack.Push(10);
      stack.Push(20);
      stack.Push(30);
      stack.Push(40);
      stack.Push(50);
      stack.Push(60);
      stack.Push(70);
      stack.Push(80);
      stack.Push(90);
      stack.Push(100);

      Console.WriteLine("Displaying the stack...");
      foreach(int val in stack) {
         Console.WriteLine(val);
      }

      int[] intArr = new int[stack.Count];
      stack.CopyTo(intArr, 0);

      Console.WriteLine("Displaying the array...");
      foreach(int val in intArr) {
         Console.WriteLine(val);
      }
   }
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

Displaying the stack...
100
90
80
70
60
50
40
30
20
10
Displaying the array...
100
90
80
70
60
50
40
30
20
10

この例では、stack.Countと同じサイズの配列を作成し、インデックス0からコピーしています。そのため、スタックの内容がそのまま配列に反映されます。

例2:配列の任意の位置からコピーする

次に、コピー開始位置を指定して、配列の途中からスタックの要素をコピーする例を紹介します。

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      Stack<int> stack = new Stack<int>();
      stack.Push(10);
      stack.Push(20);
      stack.Push(30);
      stack.Push(40);
      stack.Push(50);

      Console.WriteLine("Displaying the stack...");
      foreach(int val in stack) {
         Console.WriteLine(val);
      }

      int[] intArr = new int[10];
      stack.CopyTo(intArr, 2);

      Console.WriteLine("Displaying the array...");
      foreach(int val in intArr) {
         Console.WriteLine(val);
      }
   }
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

Displaying the stack...
50
40
30
20
10
Displaying the array...
0
0
50
40
30
20
10
0
0
0

この例では、サイズ10の配列に対してインデックス2からコピーを行っています。そのため、先頭2つの要素(インデックス0と1)および末尾3つの要素(インデックス7〜9)は初期値の0のままとなり、インデックス2〜6にスタックの5つの要素が格納されます。

まとめ

CopyToメソッドを使えば、Stackの要素を配列の任意の位置へ柔軟にコピーできます。ただし、コピー先の配列サイズが不足している場合は例外が発生するため、「コピー開始インデックス+スタックの要素数」が配列のサイズ以内に収まるよう注意しましょう。

  1. C#のStackクラスでCountプロパティを使って要素数を取得する方法

    C#のStackクラスに追加された要素の数を確認したい場合には、Countプロパティを使用します。Countプロパティは、スタック内に現在格納されている要素の総数をint型の整数として返します。 StackクラスのCountプロパティとは StackはLIFO(Last In First Out:後入れ先出し)方式のコレクションであり、Pushメソッドで要素を追加し、Popメソッドで要素を取り出します。Countプロパティを参照することで、その時点でスタックにいくつの要素が存在するかを簡単に把握できます。 なお、Countプロパティの取得はO(1)の計算量で行われるため、要素数が多くても高速に

  2. C#で配列をコピーする方法|Array.Copyメソッドの使い方を解説

    C#では、Array.Copyメソッドを使うことで、ある配列の一部(または全体)を別の配列へ簡単にコピーできます。この記事では、Array.Copyメソッドの基本的な使い方を、サンプルコードと実行結果付きでわかりやすく解説します。配列コピーの基本構造まず、コピー元となる元の配列を用意します。ここでは要素数10個の整数型配列を定義します。int[] n = new int[10]; /* n は 10 個の整数を持つ配列 */次に、コピー先となる新しい配列です。こちらは元の配列の一部を格納するため、要素数は5個にします。int[] m = new int[5]; /* m は 5 個の整数を持つ