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

C#のQueue.CopyTo()メソッドの使い方を徹底解説!配列へのコピー方法と実行例

C#のQueue.CopyTo()メソッドは、キュー(Queue)に格納されている要素を、既存の1次元配列へ指定したインデックス位置からコピーするために使用されるメソッドです。キューの内容を配列として扱いたい場合や、既存の配列の一部にキューの要素を挿入したい場合などに便利です。

構文

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

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

パラメータ

arr:キューからコピーされた要素の格納先となる1次元配列を指定します。
index:コピーを開始する配列内の位置を、0から始まるインデックスで指定します。

なお、このメソッドを使用する際には以下の点に注意が必要です。

  • arrがnullの場合、ArgumentNullExceptionがスローされます。
  • indexが負の値の場合、ArgumentOutOfRangeExceptionがスローされます。
  • 配列の容量が不足している場合、ArgumentExceptionがスローされます。

使用例1:int型のキューを配列へコピー

まずは、int型のキューを配列にコピーする基本的な例を見てみましょう。

using System;
using System.Collections.Generic;
public class Demo {
    public static void Main() {
        Queue<int> queue = new Queue<int>();
        queue.Enqueue(100);
        queue.Enqueue(200);
        queue.Enqueue(300);
        Console.Write("要素数 = ");
        Console.WriteLine(queue.Count);
        Console.WriteLine("キューの内容...");
        foreach(int i in queue) {
            Console.WriteLine(i);
        }
        Console.WriteLine("キューに500は含まれているか? = " + queue.Contains(500));
        int[] intArr = new int[5];
        intArr[0] = 1;
        intArr[1] = 2;
        intArr[2] = 3;
        intArr[3] = 4;
        // インデックス1からキューの要素をコピー
        queue.CopyTo(intArr, 1);
        Console.WriteLine("\nキュー(更新後)");
        foreach(int i in queue) {
            Console.WriteLine(i);
        }
        Console.WriteLine("\n配列(更新後)");
        foreach(int i in intArr) {
            Console.WriteLine(i);
        }
    }
}

出力結果

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

要素数 = 3
キューの内容...
100
200
300
キューに500は含まれているか? = False
キュー(更新後)
100
200
300
配列(更新後)
1
100
200
300
0

この例では、初期値「1, 2, 3, 4」が入った長さ5の配列に対して、インデックス1からキューの要素(100, 200, 300)をコピーしています。その結果、配列は「1, 100, 200, 300, 0」となり、元の値2〜4が上書きされ、最後の要素0はそのまま残っていることがわかります。

使用例2:string型のキューを配列へコピー

次に、string型のキューを使った別の例を見てみましょう。

using System;
using System.Collections.Generic;
public class Demo {
    public static void Main() {
        Queue<string> queue = new Queue<string>();
        queue.Enqueue("Tim");
        queue.Enqueue("Jack");
        queue.Enqueue("Nathan");
        queue.Enqueue("Tom");
        queue.Enqueue("David");
        queue.Enqueue("Mark");
        Console.Write("要素数 = ");
        Console.WriteLine(queue.Count);
        Console.WriteLine("キューの内容...");
        foreach(string i in queue) {
            Console.WriteLine(i);
        }
        string[] strArr = new string[10];
        strArr[0] = "AB";
        strArr[1] = "BC";
        strArr[2] = "DE";
        strArr[3] = "EF";
        // インデックス1からキューの要素をコピー
        queue.CopyTo(strArr, 1);
        Console.WriteLine("\nキュー(更新後)");
        foreach(string i in queue) {
            Console.WriteLine(i);
        }
        Console.WriteLine("\n配列(更新後)");
        foreach(string i in strArr) {
            Console.WriteLine(i);
        }
    }
}

出力結果

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

要素数 = 6
キューの内容...
Tim
Jack
Nathan
Tom
David
Mark
キュー(更新後)
Tim
Jack
Nathan
Tom
David
Mark
配列(更新後)
AB
Tim
Jack
Nathan
Tom
David
Mark

この例では、6つの名前が格納されたキューを、長さ10の文字列配列のインデックス1からコピーしています。先頭の「AB」は保持され、それ以降にキューの要素が順番に書き込まれています。また、CopyTo()メソッドはあくまでコピーを行うため、元のキューの内容は変更されない点にも注目してください。

まとめ

Queue.CopyTo()メソッドを使うことで、キューの要素を簡単に既存の配列へコピーできます。コピー開始位置を自由に指定できるため、配列の一部だけをキューの内容で置き換えたい場合に特に有用です。ただし、コピー先の配列サイズが十分であることを事前に確認し、例外処理も適切に行うことが重要です。

  1. C#のAnyメソッドとは?条件を満たす要素の有無を判定する使い方とサンプルコード

    C#のLINQに含まれるAnyメソッドは、シーケンス(配列やリストなどのコレクション)内の要素のうち、少なくとも1つが指定した条件を満たしているかどうかを判定するメソッドです。 条件を満たす要素が1つでも存在すれば true を返し、1つも存在しなければ false を返します。 基本構文 bool result = collection.Any(要素 => 条件); 使用例 まず、次のような整数型の配列を用意します。 int[] arr = {5, 7, 10, 12, 15, 18, 20}; この配列に対して Any() メソッドを使い、「10より大きい要素が1つでも存在するかどう

  2. C#のContainsKey()メソッドとは?Hashtableでキーの存在を確認する方法

    C#のContainsKey()メソッドは、Hashtableコレクション内に指定したキーが存在するかどうかを確認するための便利なメソッドです。キーが存在する場合はTrue、存在しない場合はFalseを返します。ContainsKey()メソッドの基本的な使い方まず、Hashtableコレクションを作成し、いくつかの要素を追加してみましょう。Hashtable h = new Hashtable(); h.Add(1, Sam); h.Add(2, Jack); h.Add(3, Andy); h.Add(4, Katie); h.Add(5, Beth); h.Add(6, Benjamin