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

C#のStack.CopyTo()メソッドとは?使い方とサンプルコードを解説

C#のStack.CopyTo()メソッドは、Stack(スタック)の要素を、既存の1次元配列に対して指定したインデックスの位置からコピーするために使用されます。スタックの内容をまとめて配列へ移し替えたい場合に活用できる便利なメソッドです。

構文

CopyTo()メソッドの構文は以下のとおりです。

public virtual void CopyTo(Array arr, int index);

パラメータの説明:

  • arr … Stackからコピーされる要素のコピー先となる1次元配列です。
  • index … コピーを開始する配列上のインデックス位置です。

なお、スタックはLIFO(後入れ先出し)構造であるため、配列には最後にPushした要素から順番に格納される点に注意してください。

例1:整数のStackをint型配列にコピーする

まずは整数値を扱う基本的な例を見てみましょう。

using System;
using System.Collections;

public class Demo {
   public static void Main(){
      Stack stack = new Stack();
      stack.Push(150);
      stack.Push(300);
      stack.Push(500);
      stack.Push(750);
      stack.Push(1000);
      stack.Push(1250);
      stack.Push(1500);
      stack.Push(2000);
      stack.Push(2500);

      Console.WriteLine("スタックの要素...");
      foreach(int val in stack){
         Console.WriteLine(val);
      }
      Console.WriteLine("要素数 = " + stack.Count);
      Console.WriteLine("要素750はスタックに含まれるか? = " + stack.Contains(750));

      stack.Push(3000);
      Console.WriteLine("\nスタックの要素...更新後");
      foreach(int val in stack){
         Console.WriteLine(val);
      }
      Console.WriteLine("要素数(更新後)= " + stack.Count);
      Console.WriteLine("要素5000はスタックに含まれるか? = " + stack.Contains(5000));

      Stack stack2 = (Stack)stack.Clone();
      Console.WriteLine("\nスタックの要素...複製");
      foreach(int val in stack2){
         Console.WriteLine(val);
      }
      Console.WriteLine("要素数(更新後)= " + stack2.Count);

      Console.WriteLine("\n複製したスタックを整数型配列にコピー...");
      int[] intArr = new int[stack2.Count];
      stack2.CopyTo(intArr, 0);
      foreach(int j in intArr){
         Console.WriteLine(j);
      }
   }
}

実行結果

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

スタックの要素...
2500
2000
1500
1250
1000
750
500
300
150
要素数 = 9
要素750はスタックに含まれるか? = True
スタックの要素...更新後
3000
2500
2000
1500
1250
1000
750
500
300
150
要素数(更新後)= 10
要素5000はスタックに含まれるか? = False
スタックの要素...複製
3000
2500
2000
1500
1250
1000
750
500
300
150
要素数(更新後)= 10
複製したスタックを整数型配列にコピー...
3000
2500
2000
1500
1250
1000
750
500
300
150

例2:文字列のStackをstring型配列にコピーする

続いて、文字列を要素に持つスタックの例です。

using System;
using System.Collections;

public class Demo {
   public static void Main(){
      Stack stack = new Stack();
      stack.Push("Projectors");
      stack.Push("Monitors");
      stack.Push("XPS");
      stack.Push("Laptop");
      stack.Push("Notebook");

      Console.WriteLine("スタックの要素...");
      foreach(string val in stack){
         Console.WriteLine(val);
      }
      Console.WriteLine("要素数 = " + stack.Count);
      Console.WriteLine("要素XPSはスタックに含まれるか? = " + stack.Contains("XPS"));

      stack.Push("Ultrabook");
      Console.WriteLine("\nスタックの要素...更新後");
      foreach(string val in stack){
         Console.WriteLine(val);
      }
      Console.WriteLine("要素数(更新後)= " + stack.Count);
      Console.WriteLine("要素Ultrabookはスタックに含まれるか? = " + stack.Contains("Ultrabook"));

      Stack stack2 = (Stack)stack.Clone();
      Console.WriteLine("\nスタックの要素...複製");
      foreach(string val in stack2){
         Console.WriteLine(val);
      }
      Console.WriteLine("要素数(更新後)= " + stack2.Count);

      Console.WriteLine("\n複製したスタックを文字列型配列にコピー...");
      string[] strArr = new string[stack2.Count];
      stack2.CopyTo(strArr, 0);
      foreach(string j in strArr){
         Console.WriteLine(j);
      }
   }
}

実行結果

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

スタックの要素...
Notebook
Laptop
XPS
Monitors
Projectors
要素数 = 5
要素XPSはスタックに含まれるか? = True
スタックの要素...更新後
Ultrabook
Notebook
Laptop
XPS
Monitors
Projectors
要素数(更新後)= 6
要素Ultrabookはスタックに含まれるか? = True
スタックの要素...複製
Ultrabook
Notebook
Laptop
XPS
Monitors
Projectors
要素数(更新後)= 6
複製したスタックを文字列型配列にコピー...
Ultrabook
Notebook
Laptop
XPS
Monitors
Projectors

使用時の注意点

  • コピー先の配列サイズが「index + スタックの要素数」に満たない場合、例外がスローされます。事前に配列の容量を十分に確保しておきましょう。
  • arrにnullを渡すとArgumentNullExceptionが発生します。
  • indexに負の値を指定した場合も例外となります。
  • 要素はスタックの先頭(最後にPushされた要素)から順にコピーされるため、配列内の並び順はPushした順序とは逆になります。
  1. C#のConsole.SetBufferSize()メソッドの使い方を徹底解説

    C#におけるConsole.SetBufferSize()メソッドは、コンソール画面のバッファ領域(スクリーンバッファ)の幅と高さを指定した値に設定するために使用されるメソッドです。コンソールアプリケーションで表示領域をカスタマイズしたい場合に活用できます。構文Console.SetBufferSize()メソッドの構文は以下の通りです。public static void SetBufferSize (int width, int height);各パラメータの意味は次のようになっています。width: バッファ領域の幅(列数)を指定します。height: バッファ領域の高さ(行数)を指定し

  2. C#のConsole.ResetColor()メソッドの使い方を解説

    概要C#のConsole.ResetColor()メソッドは、コンソールの前景色(文字色)と背景色を、既定の配色に戻すために使用されます。プログラム内で一時的に文字色や背景色を変更した後、元の状態へ復元したい場合に非常に便利です。構文ResetColor()メソッドの構文は以下のとおりです。public static void ResetColor ();このメソッドは引数を受け取らず、戻り値もありません。また、staticメソッドであるため、インスタンスを生成することなく、Consoleクラスから直接呼び出すことができます。使用例それでは、C#でConsole.ResetColor()メソッ