Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Phương thức Stack.Contains() trong C#

Giới thiệu

Phương thức Stack.Contains() trong C# kiểm tra xem một đối tượng có tồn tại trong Stack hay không. Trả về true nếu tìm thấy, ngược lại false.

Cú pháp

public virtual bool Contains (object ob);

Tham số ob là đối tượng cần tìm trong stack.

Ví dụ 1: Stack chuỗi

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("Các phần tử Stack...");
        foreach(string val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("Số lượng phần tử = " + stack.Count);
        Console.WriteLine("Phần tử 'Speakers' có trong stack? = " + stack.Contains("Speakers"));

        stack.Push("Headphone");
        stack.Push("Keyboard");
        stack.Push("Earphone");

        Console.WriteLine("\nCác phần tử Stack...đã cập nhật");
        foreach(string val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("Số lượng phần tử (đã cập nhật) = " + stack.Count);
        Console.WriteLine("Phần tử 'Alienware' có trong stack? = " + stack.Contains("Alienware"));

        Stack stack2 = (Stack)stack.Clone();
        Console.WriteLine("\nCác phần tử Stack...đã clone");
        foreach(string val in stack2) {
            Console.WriteLine(val);
        }
        Console.Write("Số lượng phần tử (đã cập nhật) = " + stack2.Count);
    }
}

Đầu ra ví dụ 1

Các phần tử Stack...
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
Số lượng phần tử = 7
Phần tử 'Speakers' có trong stack? = False

Các phần tử Stack...đã cập nhật
Earphone
Keyboard
Headphone
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
Số lượng phần tử (đã cập nhật) = 10
Phần tử 'Alienware' có trong stack? = True

Các phần tử Stack...đã clone
Earphone
Keyboard
Headphone
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
Số lượng phần tử (đã cập nhật) = 10

Ví dụ 2: Stack số nguyên

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("Các phần tử Stack...");
        foreach(int val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("Số lượng phần tử = " + stack.Count);
        Console.WriteLine("Phần tử 750 có trong stack? = " + stack.Contains(750));

        stack.Push(3000);

        Console.WriteLine("\nCác phần tử Stack...đã cập nhật");
        foreach(int val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("Số lượng phần tử (đã cập nhật) = " + stack.Count);
        Console.WriteLine("Phần tử 5000 có trong stack? = " + stack.Contains(5000));

        Stack stack2 = (Stack)stack.Clone();
        Console.WriteLine("\nCác phần tử Stack...đã clone");
        foreach(int val in stack2) {
            Console.WriteLine(val);
        }
        Console.Write("Số lượng phần tử (đã cập nhật) = " + stack2.Count);
    }
}

Đầu ra ví dụ 2

Các phần tử Stack...
2500
2000
1500
1250
1000
750
500
300
150
Số lượng phần tử = 9
Phần tử 750 có trong stack? = True

Các phần tử Stack...đã cập nhật
3000
2500
2000
1500
1250
1000
750
500
300
150
Số lượng phần tử (đã cập nhật) = 10
Phần tử 5000 có trong stack? = False

Các phần tử Stack...đã clone
3000
2500
2000
1500
1250
1000
750
500
300
150
Số lượng phần tử (đã cập nhật) = 10

Đặc điểm quan trọng

  • Tìm kiếm tuyến tính (linear search) từ đỉnh xuống đáy. Độ phức tạp: O(n).
  • Sử dụng Equals() để so sánh (reference equality cho reference type, value equality cho value type).
  • Không thay đổi stack (read-only operation).
  • Trả về false nếu stack rỗng hoặc ob == null (trừ khi stack chứa null).

Lưu ý hiệu năng

  • Stack không được thiết kế cho tìm kiếm thường xuyên. Nếu cần tra cứu nhanh (O(1)), hãy dùng HashSet<T> hoặc Dictionary<TKey, TValue> song song.
  • Với Stack<T> generic, tránh boxing/unboxing khi tìm kiếm value type.

Ứng dụng

  • Kiểm tra trùng lặp trước khi Push (nếu yêu cầu unique).
  • Debug: kiểm tra trạng thái stack chứa giá trị mong đợi.
  • Thuật toán backtracking: kiểm tra trạng thái đã thăm.