คุณต้องขุดนิดหน่อยเพื่อดูว่าพจนานุกรมถูกนำไปใช้อย่างไรใน C # - มันไม่ชัดเจนเท่าHashMap (ตารางแฮช) หรือTreeMap (ต้นไม้เรียง) (หรือConcurrentSkipListMap - รายการข้าม )
หากคุณขุดลงในส่วน "ข้อสังเกต":
คลาส generic Dictionary จัดเตรียมการแม็พจากชุดของคีย์ไปยังชุดของค่า การเพิ่มในพจนานุกรมแต่ละรายการประกอบด้วยค่าและคีย์ที่เกี่ยวข้อง การดึงค่าโดยใช้คีย์ของมันนั้นรวดเร็วมากใกล้กับ O (1) เนื่องจากคลาส Dictionary ถูกใช้เป็นตารางแฮช
และที่นั่นเรามีมัน มันเป็นตารางแฮช โปรดทราบว่าฉันได้เชื่อมโยงบทความวิกิพีเดียไว้ที่นั่น - เป็นการอ่านที่ดี คุณอาจต้องการอ่านหัวข้อการแก้ไขการชน มันเป็นไปได้ที่จะได้รับชุดข้อมูลทางพยาธิวิทยาที่ devolves ค้นหาเพื่อ O (N) (ตัวอย่างเช่นทุกสิ่งที่คุณแทรกตรงกับค่าแฮเดียวกันหรือดัชนีในตารางแฮชด้วยเหตุผลบางอย่างและคุณจะเหลือเชิงเส้นละเอียด )
ในขณะที่พจนานุกรมเป็นโซลูชันทั่วไปคุณไม่ควรผ่านประเภทที่เป็นรูปธรรม (เช่นพจนานุกรม) - คุณควรผ่านรอบอินเทอร์เฟซ ในกรณีนี้ส่วนต่อประสานนั้นคือIDictionary
( เอกสาร ) ด้วยวิธีนี้คุณจะสามารถเขียนการใช้พจนานุกรมของคุณเองได้อย่างสมบูรณ์แบบซึ่งทำสิ่งที่เหมาะสมที่สุดสำหรับข้อมูลที่คุณมี
ในฐานะที่เป็นประสิทธิภาพของการค้นหาต่างๆ / มี?
- การเดินรายการที่ไม่เรียงลำดับ: O (N)
- การค้นหาแบบไบนารีของอาร์เรย์ที่เรียงลำดับ: O (บันทึก N)
- ต้นไม้ที่เรียงลำดับ: O (บันทึก N)
- ตารางแฮช: O (1)
สำหรับคนส่วนใหญ่ตารางแฮชเป็นสิ่งที่พวกเขาต้องการ
คุณอาจพบว่าSortedDictionaryเป็นสิ่งที่คุณต้องการแทน:
SortedDictionary<TKey, TValue>
ระดับทั่วไปเป็นต้นไม้ค้นหาแบบทวิภาคกับ O (log n) การดึงที่ n คือจำนวนขององค์ประกอบในพจนานุกรม ในแง่นี้มันคล้ายกับSortedList<TKey, TValue>
คลาสทั่วไป คลาสที่สองมีโมเดลวัตถุที่คล้ายกันและทั้งสองมีการดึงข้อมูล O (log n)
แม้ว่าอีกครั้งหากโครงสร้างข้อมูลไม่ใช่โครงสร้างที่ทำงานร่วมกับข้อมูลของคุณคุณจะได้รับเครื่องมือ (อินเทอร์เฟซ) เพื่อให้สามารถเขียนโครงสร้างที่ดีที่สุดสำหรับข้อมูลของคุณ
พจนานุกรมตัวเองเป็นชนิดข้อมูลนามธรรม คุณให้พจนานุกรมฉันและฉันรู้ว่าฉันสามารถทำอะไรกับมันและเครื่องมือทั้งหมดที่นั่นเพื่อให้ฉันใช้โดยธรรมชาติของมันเป็นพจนานุกรม หากคุณให้ ArrayList แก่ฉันฉันจะพบว่าตัวเองเขียนโค้ดของตัวเองเพื่อค้นหาแทรกหรือลบรายการออกจากรายการ นี่เป็นการเสียเวลาของฉันและยังหมายความว่ามีโอกาสเกิดข้อผิดพลาดมากกว่าเมื่อฉันคัดลอกรหัสซ้ำแล้วซ้ำอีกจากจุดหนึ่งไปยังอีกจุดหนึ่ง
Data Structures
ลิงค์ wiki นี้อาจช่วยคุณได้มากขึ้น