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

C#のStack.Contains()メソッドとは?使い方とサンプルコードを実例付きで解説

C#のStackクラスに用意されているContains()メソッドは、指定した要素がスタック内に存在するかどうかを確認するためのメソッドです。要素が見つかればtrue、存在しなければfalseを返します。

なお、Contains()は内部的に線形探索を行うため、計算量はO(n)です。スタックの要素数が多い場合はパフォーマンスへの影響も考慮しておきましょう。

構文

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

public virtual bool Contains (object ob);

引数「ob」には、スタック内で検索したいオブジェクトを指定します。戻り値はbool型で、検索結果がtrueまたはfalseで返されます。

サンプルコード①:文字列のスタックの場合

まずは、文字列を格納したスタックに対してContains()メソッドを使用する例を見てみましょう。

using System;
using System.Collections;
public class Demo {
    public static void Main() {
        Stack stack = new Stack();
        stack.Push("Inspiron");
        stack.Push("Alienware");
        stack.Push("Projectors");
        stack.Push("Monitors");
        stack.Push("XPS");
        stack.Push("Laptop");
        stack.Push("Notebook");
        Console.WriteLine("Stack elements...");
        foreach(string val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("Count of elements = "+stack.Count);
        Console.WriteLine("Element Speakers is the stack? = "+stack.Contains("Speakers"));
        stack.Push("Headphone");
        stack.Push("Keyboard");
        stack.Push("Earphone");
        Console.WriteLine("\nStack elements...updated");
        foreach(string val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("Count of elements (updated) = "+stack.Count);
        Console.WriteLine("Element Alienware is the stack? = "+stack.Contains("Alienware"));
        Stack stack2 = (Stack)stack.Clone();
        Console.WriteLine("\nStack elements...cloned");
        foreach(string val in stack2) {
            Console.WriteLine(val);
        }
        Console.Write("Count of elements (updated) = "+stack2.Count);
    }
}

実行結果

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

Stack elements...
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
Count of elements = 7
Element Speakers is the stack? = False
Stack elements...updated
Earphone
Keyboard
Headphone
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
Count of elements (updated) = 10
Element Alienware is the stack? = True
Stack elements...cloned
Earphone
Keyboard
Headphone
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
Count of elements (updated) = 10

この例では、「Speakers」はスタックに存在しないためFalseが返され、追加後のスタックに含まれる「Alienware」についてはTrueが返されています。また、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);
        Console.WriteLine("Element 750 is the stack? = "+stack.Contains(750));
        stack.Push(3000);
        Console.WriteLine("\nStack elements...updated");
        foreach(int val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("Count of elements (updated) = "+stack.Count);
        Console.WriteLine("Element 5000 is the stack? = "+stack.Contains(5000));
        Stack stack2 = (Stack)stack.Clone();
        Console.WriteLine("\nStack elements...cloned");
        foreach(int val in stack2) {
            Console.WriteLine(val);
        }
        Console.Write("Count of elements (updated) = "+stack2.Count);
    }
}

実行結果

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

Stack elements...
2500
2000
1500
1250
1000
750
500
300
150
Count of elements = 9
Element 750 is the stack? = True
Stack elements...updated
3000
2500
2000
1500
1250
1000
750
500
300
150
Count of elements (updated) = 10
Element 5000 is the stack? = False
Stack elements...cloned
3000
2500
2000
1500
1250
1000
750
500
300
150
Count of elements (updated) = 10

この例では、スタック内に存在する「750」に対してはTrue、存在しない「5000」に対してはFalseが返されています。

まとめ

Stack.Contains()メソッドを使えば、スタック内に特定の要素が存在するかどうかを簡単に判定できます。戻り値がbool型であるため、if文などの条件分岐と組み合わせて利用するのが一般的です。なお、ここで紹介したのは非ジェネリックなSystem.Collections.Stackですが、ジェネリック版のStack<T>にも同名のContains()メソッドが用意されており、同様の使い方が可能です。

  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()メソッ