C # Hashtable พร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
Hashtable ใน C# เป็นคอลเลกชันจากเนมสเปซ System.Collections ที่จัดเก็บข้อมูลในรูปแบบคู่คีย์-ค่า โดยแต่ละคีย์ที่ไม่ซ้ำกันจะแมปกับค่า และคีย์จะช่วยให้ค้นหาค่าที่จัดเก็บไว้ได้อย่างรวดเร็ว

Hashtable ใน C # คืออะไร?
ตารางแฮชเป็นคอลเลกชันพิเศษที่ใช้ในการจัดเก็บรายการคีย์-ค่า ดังนั้นแทนที่จะจัดเก็บเพียงค่าเดียว เช่น สแต็ก รายการอาร์เรย์ และคิว ตารางแฮชจะเก็บ 2 ค่า ค่า 2 เหล่านี้ประกอบกันเป็นองค์ประกอบของตารางแฮช
ด้านล่างนี้คือตัวอย่างบางส่วนของค่าของตารางแฮชที่อาจมีลักษณะดังนี้
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
ด้านบนเรามีคู่ค่าคีย์ 3 คู่ คีย์ของแต่ละองค์ประกอบคือ 001, 002 และ 003 ตามลำดับ ค่าของคู่ค่าคีย์แต่ละคู่คือ “สุทธิ.“, “C#” และ “ASP.Net” ตามลำดับ
มาดูการดำเนินการที่มีให้สำหรับคอลเลกชัน Hashtable อย่างละเอียดเพิ่มเติม
คำประกาศของแฮชเทเบิล
การประกาศ Hashtable แสดงอยู่ด้านล่าง Hashtable ถูกสร้างขึ้นด้วยความช่วยเหลือของประเภทข้อมูล Hashtable คำหลัก "ใหม่" ใช้เพื่อสร้างวัตถุของ Hashtable จากนั้นวัตถุจะถูกกำหนดให้กับตัวแปร ht
Hashtable ht = new Hashtable()
การเพิ่มองค์ประกอบลงใน Hashtable
วิธีการเพิ่มใช้ในการเพิ่มองค์ประกอบให้กับ คิว- ไวยากรณ์ทั่วไปของคำสั่งได้รับด้านล่าง
HashTable.add("key","value")
1 ตัวอย่าง:
โปรดจำไว้ว่าแต่ละองค์ประกอบของตารางแฮชประกอบด้วย 2 ค่า ค่าหนึ่งคือคีย์ และอีกค่าคือค่า
ตอนนี้เรามาดูการทำงานในระดับโค้ดกันดีกว่า โค้ดที่กล่าวถึงด้านล่างทั้งหมดจะถูกเขียนลงในแอปพลิเคชันคอนโซลของเรา
รหัสจะถูกเขียนลงในไฟล์ Program.cs ของเรา ในโปรแกรมด้านล่างเราจะเขียนโค้ดเพื่อดูว่าเราสามารถใช้วิธีการที่กล่าวมาข้างต้นได้อย่างไร
สำหรับตอนนี้ในตัวอย่างของเรา เราจะดูว่าเราจะสร้าง hashtable ได้อย่างไร เพิ่มองค์ประกอบลงใน hashtable และแสดงองค์ประกอบเหล่านั้นตามนั้น
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); ICollection keys = ht.Keys; foreach (String k in keys) { Console.WriteLine(ht[k]); } Console.ReadKey(); } } }
Code คำอธิบาย:-
- ขั้นแรก เราประกาศตัวแปร hashtable โดยใช้ประเภทข้อมูล Hashtable โดยใช้คีย์เวิร์ด "ใหม่" ชื่อของตัวแปรที่กำหนดคือ 'ht'
- จากนั้นเราเพิ่มองค์ประกอบลงในตารางแฮชโดยใช้วิธีเพิ่ม โปรดจำไว้ว่าเราจำเป็นต้องเพิ่มทั้งองค์ประกอบคีย์และค่าเมื่อเพิ่มบางอย่างลงในแฮชเทเบิล
- ไม่มีวิธีโดยตรงในการแสดงองค์ประกอบของตารางแฮช
- ในการแสดง hashtable เราต้องรับรายการคีย์ (001, 002 และ 003) จากตารางแฮชก่อน
- ซึ่งทำได้ผ่านอินเทอร์เฟซ ICollection นี่เป็นประเภทข้อมูลพิเศษที่สามารถใช้เพื่อจัดเก็บคีย์ของคอลเลกชันที่แฮชได้ จากนั้นเราจะกำหนดคีย์ของคอลเลกชันแฮชให้กับตัวแปร 'คีย์'
- ถัดไปสำหรับแต่ละค่าคีย์ เราได้รับค่าที่เกี่ยวข้องใน hashtable โดยใช้คำสั่ง ht[k]
หากป้อนโค้ดด้านบนอย่างถูกต้องแล้วและรันโปรแกรมจะแสดงผลลัพธ์ต่อไปนี้
Output:
มาดูวิธีการเพิ่มเติมสำหรับตารางแฮชกัน
ประกอบด้วยคีย์
วิธีการนี้ใช้เพื่อดูว่ามีคีย์อยู่ใน Hashtable หรือไม่ ด้านล่างนี้คือไวยากรณ์ทั่วไปของคำสั่งนี้ คำสั่งจะคืนค่าเป็นจริงหากมีคีย์อยู่ มิฉะนั้นจะส่งคืนค่าเท็จ
Hashtable.Containskey(key)
ประกอบด้วยค่า
วิธีการนี้ใช้เพื่อดูว่ามีค่าอยู่ใน Hashtable หรือไม่ ด้านล่างนี้คือไวยากรณ์ทั่วไปของคำสั่งนี้ คำสั่งจะส่งกลับค่าจริงหากมีค่าอยู่ มิฉะนั้นจะส่งกลับค่าเท็จ
Hashtable.ContainsValue(value)
2 ตัวอย่าง:
มาเปลี่ยนรหัสในของเรา แอปพลิเคชันคอนโซล เพื่อแสดงให้เห็นว่าเราสามารถใช้เมธอด "Containskey" และ "ContainsValue" ได้อย่างไร
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); Console.WriteLine(ht.ContainsKey("001")); Console.WriteLine(ht.ContainsValue("C#")); Console.ReadKey(); } } }
Code คำอธิบาย:-
- ขั้นแรก เราใช้เมธอด ประกอบด้วยคีย์ เพื่อดูว่าคีย์นั้นมีอยู่ในแฮชเทเบิลหรือไม่ วิธีนี้จะคืนค่าเป็นจริงหากมีคีย์อยู่ในแฮชเทเบิล วิธีการนี้ควรคืนค่าเป็นจริงเนื่องจากมีคีย์อยู่ในแฮชเทเบิล
- จากนั้นเราใช้เมธอด ประกอบด้วยค่า เพื่อดูว่ามีค่าอยู่ในแฮชเทเบิลหรือไม่ วิธีนี้จะคืนค่า 'จริง' เนื่องจากค่ามีอยู่ในแฮชเทเบิล
หากป้อนโค้ดด้านบนอย่างถูกต้องแล้วและรันโปรแกรมจะแสดงผลลัพธ์ต่อไปนี้
Output:
จากผลลัพธ์ คุณจะเห็นได้อย่างชัดเจนว่าทั้งคีย์และค่าที่กำลังค้นหามีอยู่ในตารางแฮช
วิธีการวนลูปผ่านแฮชเทเบิลใน C#
ตัวอย่างข้างต้นอ่านค่าผ่านคอลเลกชัน Keys แต่การอ่าน Hashtable สามารถทำได้ด้วยวิธีที่สะอาดกว่า การใช้ลูป foreach กับ DictionaryEntry จะส่งทั้งคีย์และค่าของทุกองค์ประกอบมาให้พร้อมกันในการอ่านครั้งเดียว ซึ่งเป็นวิธีที่ใช้กันทั่วไปในการอ่าน Hashtable
ขั้นตอน 1) สร้างแฮชเทเบิลและเพิ่มคู่คีย์-ค่าสามคู่ลงไปในนั้น
ขั้นตอน 2) วนลูปผ่าน Hashtable โดยใช้ตัวแปร DictionaryEntry จากนั้นอ่านคุณสมบัติ Key และ Value ของแต่ละรายการ
using System; using System.Collections; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("101", "Java"); ht.Add("102", "Python"); ht.Add("103", "Kotlin"); foreach (DictionaryEntry entry in ht) { Console.WriteLine(entry.Key + " - " + entry.Value); } Console.ReadKey(); } } }
Code คำอธิบาย:-
- มีการสร้าง Hashtable ชื่อ ht และมีการแทรกคู่คีย์-ค่าสามคู่โดยใช้วิธี Add
- ลูป foreach จะกำหนดแต่ละองค์ประกอบให้กับ DictionaryEntry ซึ่งคุณสมบัติ Key และ Value จะแสดงส่วนประกอบทั้งสองส่วนของคู่
เมื่อโปรแกรมทำงาน มันจะพิมพ์แต่ละคีย์พร้อมกับค่าของมัน เช่น 101 – Javaเนื่องจาก Hashtable ไม่เก็บลำดับการแทรก ข้อมูลคู่จึงอาจปรากฏในลำดับที่แตกต่างจากที่เพิ่มเข้ามา หากต้องการอ่านเฉพาะคีย์ ให้วนลูปผ่านคอลเลกชัน Keys และหากต้องการอ่านเฉพาะค่า ให้วนลูปผ่านคอลเลกชัน Values แทน
เมธอดและคุณสมบัติของ Hashtable ใน C#
คลาส Hashtable มีเมธอดและคุณสมบัติจำนวนไม่มากที่ครอบคลุมงานเกือบทุกอย่างที่คุณต้องการ ตั้งแต่การเพิ่มและลบคู่ ไปจนถึงการตรวจสอบความเป็นสมาชิกและการนับจำนวนองค์ประกอบ สมาชิกที่ใช้งานได้สะดวกที่สุดแสดงไว้ด้านล่าง
| สมาชิกทั่วไป | ประเภท | Descriptไอออน |
|---|---|---|
| เพิ่ม (คีย์, ค่า) | วิธี | เพิ่มคู่คีย์และค่าใหม่ โดยคีย์ต้องไม่ซ้ำกัน |
| ลบ(คีย์) | วิธี | ลบองค์ประกอบที่ตรงกับคีย์ที่ระบุ |
| ชัดเจน() | วิธี | ลบทุกคู่คีย์-ค่าออกจากแฮชเทเบิล |
| ประกอบด้วยคีย์ (คีย์) | วิธี | ส่งคืนค่าจริงเมื่อพบคีย์ที่กำหนด |
| ประกอบด้วยค่า (ค่า) | วิธี | ส่งคืนค่าจริงเมื่อมีค่าที่กำหนดอยู่ |
| นับ | อสังหาริมทรัพย์ | ดึงจำนวนคู่คีย์-ค่าที่จัดเก็บไว้ |
| คีย์ | อสังหาริมทรัพย์ | ส่งคืนคอลเลกชันของคีย์ทั้งหมด |
| ความคุ้มค่า | อสังหาริมทรัพย์ | ส่งคืนชุดค่าทั้งหมด |
เนื่องจากแต่ละคีย์ถูกแฮชไว้ ContainsKey และตัวจัดทำดัชนีจึงสามารถค้นหาองค์ประกอบได้ในเวลาเกือบคงที่ ซึ่งเป็นสิ่งที่ทำให้ Hashtable มีประโยชน์อย่างมากสำหรับการค้นหาอย่างรวดเร็ว
ความแตกต่างระหว่าง Hashtable และ Dictionary ใน C#
ทั้ง Hashtable และ Dictionary ต่างก็ใช้เก็บคู่คีย์-ค่า และทั้งคู่ก็อยู่ในตระกูลเดียวกันของภาษา C# คอลเลกชันความแตกต่างที่สำคัญคือความปลอดภัยของประเภทข้อมูล และความแตกต่างนี้จะเป็นตัวตัดสินว่าคุณควรเลือกใช้แบบใดในการเขียนโค้ดใหม่
- ความปลอดภัยประเภท: Hashtable จะเก็บทุกคีย์และค่าไว้เป็นอ็อบเจ็กต์ ในขณะที่ Dictionary จะเก็บ เนื่องจากเป็นแบบทั่วไป คอมไพเลอร์จึงตรวจสอบประเภทที่คุณใช้
- Namespace: Hashtable อยู่ใน System.Collections ในขณะที่ Dictionary อยู่ใน System.Collections.Generic
- Boxไอเอ็นจี: Hashtable จะจัดเก็บค่าประเภทต่างๆ เช่น int ไว้ในที่เดียว แต่ Dictionary ทั่วไปจะจัดเก็บข้อมูลเหล่านั้นโดยตรงและหลีกเลี่ยงค่าใช้จ่ายดังกล่าว
- ประสิทธิภาพ: โดยทั่วไปแล้ว การอ่านค่าจาก Dictionary จะเร็วกว่า เพราะไม่ต้องแปลงกลับจาก Object เมื่ออ่านค่า
- ความปลอดภัยของเกลียว: Hashtable นำเสนอ Syncตัวห่อแบบซิงโครไนซ์สำหรับผู้เขียนหนึ่งรายที่มีผู้อ่านหลายราย ในขณะที่โค้ดแบบขนานมักจะเลือกใช้ ConcurrentDictionary
สำหรับโปรเจ็กต์ใหม่ ๆ แนะนำให้ใช้ Dictionary แบบทั่วไป ส่วน Hashtable ที่ไม่ใช่แบบทั่วไปนั้นส่วนใหญ่จะพบในโค้ดเก่า ๆ




