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

Kiểm tra mảng string có chứa từ cụ thể trong C#

Kiểm tra sự tồn tại của một chuỗi trong mảng/collection string.

Cách 1: LINQ Contains (Khuyến nghị)


string[] names = { "Sachin", "India", "Bangalore", "Karnataka", "Delhi" };

bool hasSachin = names.Contains("Sachin");        // true (case-sensitive)
bool hasSachinLower = names.Contains("sachin");   // false

// Case-insensitive
bool hasSachinCI = names.Contains("sachin", StringComparer.OrdinalIgnoreCase); // true

Cách 2: LINQ Any với Predicate


// Case-sensitive
bool any1 = names.Any(x => x == "Sachin"); // true

// Case-insensitive
bool any2 = names.Any(x => x.Equals("sachin", StringComparison.OrdinalIgnoreCase)); // true

// Partial match (chứa chuỗi con)
bool any3 = names.Any(x => x.Contains("gal", StringComparison.OrdinalIgnoreCase)); // true (Bangalore)

Cách 3: Array.IndexOf / Array.FindIndex


int index = Array.IndexOf(names, "Sachin"); // 0 nếu tìm thấy, -1 nếu không
bool found = index >= 0;

// Case-insensitive
int indexCI = Array.FindIndex(names, x => x.Equals("sachin", StringComparison.OrdinalIgnoreCase));

Cách 4: HashSet (Hiệu suất O(1) cho lookup nhiều lần)


// Tạo HashSet một lần
var nameSet = new HashSet(names, StringComparer.OrdinalIgnoreCase);

// Lookup nhanh
bool found = nameSet.Contains("sachin"); // true, O(1)
bool found2 = nameSet.Contains("mumbai"); // false

Cách 5: Foreach thủ công (Không khuyến nghị)


bool found = false;
foreach (string name in names)
{
    if (name == "Sachin") { found = true; break; }
}

So sánh hiệu suất

Phương phápPhức tạpCase-insensitiveGhi chú
ContainsO(n)Có (overload)Đơn giản, single check
AnyO(n)Có (lambda)Linh hoạt predicate
HashSet.ContainsO(1)Có (ctor)Best cho multiple lookups
foreachO(n)ManualTránh, verbose

Trả về phần tử tìm thấy (FirstOrDefault)


string found = names.FirstOrDefault(x => x.Equals("sachin", StringComparison.OrdinalIgnoreCase));
if (found != null) Console.WriteLine($"Found: {found}");

Best Practice

  • Single check: Contains hoặc Any.
  • Multiple checks: Tạo HashSet một lần.
  • Case-insensitive: Luôn chỉ định StringComparer.OrdinalIgnoreCase.
  • Null safety: Kiểm tra null trước khi gọi method.