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

C#のStack.Equals()メソッドの使い方を徹底解説

C#におけるStack.Equals()メソッドは、Stackクラスのオブジェクトが別のオブジェクトと等しいかどうかを判定するために使用されるメソッドです。この記事では、Equals()メソッドの基本的な構文から、実際のコード例までわかりやすく解説します。

Syntax(構文)

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

public virtual bool Equals (object ob);

引数「ob」には、比較対象となるオブジェクトを指定します。戻り値はbool型で、両者が等しい場合はtrue、等しくない場合はfalseが返されます。

なお、このメソッドは参照の等価性をチェックするものであり、スタック内の要素が同じでも、異なるインスタンス同士を比較した場合にはfalseが返される点に注意が必要です。

コード例1:Cloneしたスタックとの比較

まず、Cloneメソッドで複製したスタックとの比較例を見てみましょう。

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("Stack elements...");
        foreach(int val in stack){
            Console.WriteLine(val);
        }
        Console.WriteLine("Count of elements = "+stack.Count);
        stack.Push(3000);
        stack.Push(3500);
        stack.Push(4000);
        Console.WriteLine("\nStack elements...updated");
        foreach(int val in stack){
            Console.WriteLine(val);
        }
        Console.WriteLine("\nCount of elements (updated) = "+stack.Count);
        Stack stack2 = (Stack)stack.Clone();
        Console.WriteLine("\nStack elements...cloned");
        foreach(int val in stack2){
            Console.WriteLine(val);
        }
        Console.Write("Count of elements in cloned stack (updated) = "+stack2.Count);
        Console.WriteLine("\nAre both the stacks equal? = "+stack.Equals(stack2));
    }
}

出力結果

Stack elements...
2500
2000
1500
1250
1000
750
500
300
150
Count of elements = 9
Stack elements...updated
4000
3500
3000
2500
2000
1500
1250
1000
750
500
300
150
Count of elements (updated) = 12
Stack elements...cloned
4000
3500
3000
2500
2000
1500
1250
1000
750
500
300
150
Count of elements in cloned stack (updated) = 12
Are both the stacks equal? = False

この例では、元のスタックに要素を追加した後にClone()で複製を作成し、両者を比較しています。要素数や中身は同一ですが、Equals()メソッドはFalseを返しました。これは、Equals()がオブジェクトの参照(インスタンスそのもの)を比較するためです。

コード例2:異なる内容のスタック同士の比較

次に、まったく異なる2つのスタックを比較する例を見てみましょう。

using System;
using System.Collections;
public class Demo {
    public static void Main(){
        Stack stack1 = new Stack();
        stack1.Push(150);
        stack1.Push(300);
        stack1.Push(500);
        stack1.Push(750);
        stack1.Push(1000);
        Console.WriteLine("Stack1 elements...");
        foreach(int val in stack1){
            Console.WriteLine(val);
        }
        Stack stack2 = new Stack();
        stack2.Push(350);
        stack2.Push(400);
        stack2.Push(500);
        stack2.Push(850);
        stack2.Push(900);
        Console.WriteLine("Stack2 elements...");
        foreach(int val in stack2){
            Console.WriteLine(val);
        }
        Console.WriteLine("\nAre both the stacks equal? = "+stack1.Equals(stack2));
    }
}

出力結果

Stack1 elements...
1000
750
500
300
150
Stack2 elements...
900
850
500
400
350
Are both the stacks equal? = False

このように、それぞれ独立して作成されたスタック同士を比較した場合も、結果はFalseとなります。

まとめ

C#のStack.Equals()メソッドは、指定したオブジェクトが現在のStackインスタンスと等しいかどうかを確認するためのメソッドです。重要なポイントは以下の通りです。

  • 構文は「public virtual bool Equals(object ob)」で、比較対象のオブジェクトを引数に取る
  • 戻り値はbool型(等しければtrue、そうでなければfalse)
  • Objectクラスから継承された仮想メソッドであり、既定では参照の等価性を比較する
  • 要素の中身が同じでも、別々のインスタンスであればfalseが返る

Stackクラスの要素そのものを比較したい場合は、要素を順番に取り出して個別に比較するなど、独自のロジックを実装する必要がある点に留意しましょう。

  1. C#のByte.Equals(Byte)メソッドの使い方をわかりやすく解説

    C#におけるByte.Equals(Byte)メソッドは、現在のインスタンスと指定されたByteオブジェクトが同じ値を表しているかどうかを判定し、その結果をbool型で返すメソッドです。2つのバイト値が等しければtrue、等しくなければfalseが返されます。構文Byte.Equals(Byte)メソッドの構文は以下のとおりです。public bool Equals(byte ob);パラメータob:現在のインスタンスと比較対象となるByteオブジェクトを指定します。戻り値引数obとこのインスタンスの値が一致する場合はtrue、一致しない場合はfalseを返します。使用例ここでは、実際にByt

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

    DateTime.Equals()メソッドとはC#のDateTime.Equals()メソッドは、2つのDateTimeオブジェクト(インスタンス)が等しいかどうかを判定するための静的メソッドです。比較の結果、両者が同一の日時であればtrueを返し、異なる場合はfalseを返します。このメソッドは、日時データの一致確認や条件分岐の処理などで頻繁に利用される基本的なメソッドの一つです。構文DateTime.Equals()メソッドの構文は以下の通りです。public static bool Equals (DateTime date1, DateTime date2);パラメータdate1:比較