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

C#のQueue.Clone()メソッドとは?使い方と浅いコピーの仕組みを解説

C#のQueue.Clone()メソッドは、Queue(キュー)の浅いコピー(シャローコピー)を作成するために使用されます。このメソッドを呼び出すと、元のQueueと同じ要素を持つ新しいQueueインスタンスが返されます。

浅いコピーとは

Clone()メソッドが作成するのは「浅いコピー」です。新しいQueueオブジェクト自体は独立していますが、格納されている要素そのものは元のQueueと参照を共有します。そのため、要素が参照型の場合、コピー先で要素の中身を変更すると、元のQueueの要素にも影響が及ぶ点に注意が必要です。

構文

構文は以下の通りです。

public virtual object Clone ();

戻り値はobject型であるため、実際に使用する際にはQueue型へのキャストが必要になります。

例1:文字列を格納したQueueのクローン

それでは、具体的なコード例を見てみましょう。

using System;
using System.Collections;
public class Demo {
    public static void Main(string[] args) {
        Queue queue = new Queue();
        queue.Enqueue("One");
        queue.Enqueue("Two");
        queue.Enqueue("Three");
        queue.Enqueue("Four");
        queue.Enqueue("Five");
        queue.Enqueue("Six");
        queue.Enqueue("Seven");
        queue.Enqueue("Eight");
        Console.WriteLine("Queue...");
        foreach(string str in queue) {
            Console.WriteLine(str);
        }
        Queue queue2 = (Queue)queue.Clone();
        Console.WriteLine("
Cloned Queue....");
        foreach(string str in queue2) {
            Console.WriteLine(str);
        }
    }
}

出力結果

Queue...
One
Two
Three
Four
Five
Six
Seven
Eight
Cloned Queue....
One
Two
Three
Four
Five
Six
Seven
Eight

例2:整数を格納したQueueのクローン

続いて、数値を格納したQueueでの例です。

using System;
using System.Collections;
public class Demo {
    public static void Main(string[] args) {
        Queue queue = new Queue();
        queue.Enqueue(10);
        queue.Enqueue(20);
        queue.Enqueue(30);
        queue.Enqueue(40);
        queue.Enqueue(50);
        Console.WriteLine("Queue...");
        foreach(int str in queue) {
            Console.WriteLine(str);
        }
        Queue queue2 = (Queue)queue.Clone();
        Console.WriteLine("
Cloned Queue....");
        foreach(int str in queue2) {
            Console.WriteLine(str);
        }
    }
}

出力結果

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

Queue...
10
20
30
40
50
Cloned Queue....
10
20
30
40
50

まとめ

Queue.Clone()メソッドを使えば、既存のQueueと同じ内容を持つ新しいQueueを簡単に作成できます。ただし、あくまで浅いコピーであるため、参照型の要素を扱う場合は要素の共有による副作用に注意しましょう。また、このメソッドは非ジェネリックなSystem.Collections.Queueの機能であり、ジェネリック版のQueue<T>にはClone()メソッドは用意されていません。ジェネリックコレクションで同様の処理を行いたい場合は、コンストラクタに既存のコレクションを渡す方法などが代替手段となります。

  1. C#のQueue(キュー)クラスとは?FIFOの基本とEnqueue・Dequeueの使い方

    C#のキュー(Queue)とは キュー(Queue)は、オブジェクトを「先入れ先出し(FIFO:First-In, First-Out)」で管理するコレクションです。最初に追加した要素が最初に取り出されるという特性を持つため、タスクの順番待ちや処理の履歴管理など、追加された順序どおりに要素へアクセスしたい場面で活用されます。 要素をキューに追加することを「エンキュー(Enqueue)」、キューから要素を取り出すことを「デキュー(Dequeue)」と呼びます。 要素の追加:Enqueueメソッド キューに要素を追加するには、Enqueueメソッドを使用します。 Queue q = new Qu

  2. C#のClone()メソッドで配列を複製する方法

    C#のClone()メソッドとはC#におけるClone()メソッドは、配列の複製(コピー)を作成するためのメソッドです。元の配列と同じ要素を持つ新しい配列を簡単に生成できます。なお、Clone()メソッドの戻り値はobject型であるため、通常はas演算子や明示的なキャストを使って、目的の配列型に変換して受け取ります。また、このメソッドによるコピーは「浅いコピー(シャローコピー)」である点にも注意しましょう。配列自体は新しく作られますが、参照型の要素は元の配列と同じオブジェクトを共有します。Clone()メソッドで配列を複製するサンプルコード以下は、Clone()メソッドを使って文字列配列を複