Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

เมธอด ContainsKey() ใน C# Dictionary: ตรวจสอบความมีอยู่ของคีย์

เมธอด ContainsKey() ของ Dictionary<TKey, TValue> ใช้ตรวจสอบว่าคีย์ที่ระบุมีอยู่ใน Dictionary หรือไม่ คืนค่า true หากมี false หากไม่มี ใช้เพื่อป้องกัน KeyNotFoundException เมื่อเข้าถึงคีย์ที่ไม่มีอยู่

รูปแบบการใช้งาน

Dictionary dict = new Dictionary();
bool exists = dict.ContainsKey("KeyName");

โค้ดตัวอย่างสมบูรณ์

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        var inventory = new Dictionary
        {
            { "TV", 1 },
            { "Home Theatre", 2 },
            { "Amazon Alexa", 3 },
            { "Google Home", 5 },
            { "Laptop", 5 },
            { "Bluetooth Speaker", 6 }
        };
        
        Console.WriteLine("=== ตรวจสอบคีย์ด้วย ContainsKey ===");
        CheckKey(inventory, "Laptop");
        CheckKey(inventory, "Amazon Alexa");
        CheckKey(inventory, "iPhone");
        
        Console.WriteLine("\n=== ใช้ TryGetValue (แนะนำสำหรับดึงค่าพร้อมกัน) ===");
        TryGetValue(inventory, "Laptop");
        TryGetValue(inventory, "iPhone");
        
        Console.WriteLine("\n=== นับจำนวนคีย์ที่มีอยู่ ===");
        string[] keysToCheck = { "TV", "Laptop", "iPhone", "Mouse", "Keyboard" };
        int found = keysToCheck.Count(k => inventory.ContainsKey(k));
        Console.WriteLine($"พบ {found} จาก {keysToCheck.Length} คีย์");
    }
    
    static void CheckKey(Dictionary dict, string key)
    {
        if (dict.ContainsKey(key))
            Console.WriteLine($"✓ '{key}' มีอยู่ - ค่า: {dict[key]}");
        else
            Console.WriteLine($"✗ '{key}' ไม่มีอยู่");
    }
    
    static void TryGetValue(Dictionary dict, string key)
    {
        if (dict.TryGetValue(key, out int value))
            Console.WriteLine($"✓ '{key}' = {value}");
        else
            Console.WriteLine($"✗ '{key}' ไม่พบ");
    }
}

ผลลัพธ์

=== ตรวจสอบคีย์ด้วย ContainsKey ===
✓ 'Laptop' มีอยู่ - ค่า: 5
✓ 'Amazon Alexa' มีอยู่ - ค่า: 3
✗ 'iPhone' ไม่มีอยู่

=== ใช้ TryGetValue (แนะนำสำหรับดึงค่าพร้อมกัน) ===
✓ 'Laptop' = 5
✗ 'iPhone' ไม่พบ

=== นับจำนวนคีย์ที่มีอยู่ ===
พบ 2 จาก 5 คีย์

ContainsKey vs TryGetValue - เลือกใช้อย่างไร?

สถานการณ์เมธอดที่แนะนำเหตุผล
แค่ต้องการทราบว่ามีคีย์หรือไม่ContainsKey()อ่านง่าย กำหนดเจตนาชัดเจน
ต้องการค่าพร้อมกับตรวจสอบTryGetValue()ทำทั้งสองอย่างในครั้งเดียว (O(1) แค่ครั้งเดียว)
ต้องการค่าเริ่มต้นหากไม่มีคีย์GetValueOrDefault()โค้ดสั้นที่สุด (C# 7+)

ประสิทธิภาพ

  • ContainsKey(): O(1) เฉลี่ย - ใช้ Hash Table
  • TryGetValue(): O(1) เฉลี่ย - ค้นหาและดึงค่าในขั้นตอนเดียว
  • หลีกเลี่ยงการใช้ dict[key] โดยตรง หากไม่แน่ใจว่าคีย์มีอยู่ (โยน Exception ค่าใช้จ่ายสูง)

การใช้งานกับ LINQ

var keysToCheck = new[] { "TV", "Laptop", "Phone" };
var existingKeys = keysToCheck.Where(k => inventory.ContainsKey(k));
var missingKeys = keysToCheck.Where(k => !inventory.ContainsKey(k));