ความแตกต่างระหว่างHash
และDictionary
คืออะไร?
มาจากพื้นหลังของสคริปต์ฉันรู้สึกว่ามันคล้ายกัน แต่ฉันต้องการค้นหาความแตกต่างที่แน่นอน Googling ไม่ได้ช่วยฉันเท่าไหร่
ความแตกต่างระหว่างHash
และDictionary
คืออะไร?
มาจากพื้นหลังของสคริปต์ฉันรู้สึกว่ามันคล้ายกัน แต่ฉันต้องการค้นหาความแตกต่างที่แน่นอน Googling ไม่ได้ช่วยฉันเท่าไหร่
คำตอบ:
Hash
เป็นโครงสร้างข้อมูลที่มีชื่อไม่ดีนักที่โปรแกรมเมอร์สับสนอินเตอร์เฟซกับการนำไปใช้ ( และขี้เกียจเกินกว่าที่จะเขียนชื่อเต็มเช่นHashTable
แทนที่จะหันไปใช้ตัวย่อHash
)
Dictionary
คือชื่อ"ถูกต้อง"ของอินเทอร์เฟซ (= the ADT ) คือคอนเทนเนอร์ที่เชื่อมโยงที่แมปคีย์ (โดยทั่วไปจะไม่ซ้ำกัน) กับค่า (ไม่จำเป็นต้องไม่ซ้ำกัน)
ตารางแฮชเป็นหนึ่งในการนำไปใช้งานของพจนานุกรมดังกล่าวซึ่งมีลักษณะการเข้าถึงค่อนข้างดี (ในแง่ของรันไทม์) และดังนั้นจึงมักจะเป็นการใช้งานเริ่มต้น
การใช้งานดังกล่าวมีคุณสมบัติที่สำคัญสองประการ:
(สำหรับคีย์ที่จะแฮชหมายถึงเราสามารถคำนวณค่าตัวเลขจากคีย์ซึ่งจะใช้เป็นดัชนีในอาร์เรย์ในภายหลัง)
มีการใช้งานทางเลือกอื่นของโครงสร้างข้อมูลพจนานุกรมที่กำหนดการสั่งซื้อบนคีย์ - ซึ่งมักเรียกว่าพจนานุกรมเรียง (และมักจะนำมาใช้ในแง่ของโครงสร้างการค้นหาแม้ว่ามีการใช้งานที่มีประสิทธิภาพอื่น ๆ )
ในการสรุป: พจนานุกรมคือ ADT ที่จับคู่คีย์กับค่า ADT นี้มีการนำไปใช้ที่เป็นไปได้หลายอย่างซึ่งตารางแฮชนั้นเป็นที่หนึ่ง Hash
เป็นชื่อเรียกผิด แต่ในบริบทมันเทียบเท่ากับพจนานุกรมที่นำมาใช้ในแง่ของตารางแฮช
Hash
คลาสมาใช้กับตารางแฮชเนื่องจาก Ruby 1.9 Hash
es รักษาลำดับการแทรกในขณะที่ตารางแฮชไม่ได้ ดังนั้นใน Ruby 1.9 ชื่อHash
ไม่ได้สะท้อนถึงการนำไปใช้อีกต่อไป
"พจนานุกรม" เป็นชื่อของแนวคิด hashtable เป็นการใช้งานที่เป็นไปได้
พจนานุกรมคือคำศัพท์รวมที่กำหนดไว้สำหรับการนำโครงสร้างข้อมูลไปใช้เพื่อการค้นหา / แทรกอย่างรวดเร็ว สิ่งนี้สามารถทำได้ / นำมาใช้โดยใช้โครงสร้างข้อมูลที่หลากหลายเช่นตารางแฮชรายการข้ามต้นไม้ rb เป็นต้นตารางแฮชเป็นโครงสร้างข้อมูลเฉพาะที่มีประโยชน์สำหรับวัตถุประสงค์หลายประการรวมถึงการใช้พจนานุกรม
พจนานุกรมใช้กุญแจสำคัญในการอ้างอิงค่าโดยตรงภายในของอาเรย์
กล่าวคือ (KEY => VALUE)
กัญชามักจะเป็นมากขึ้นอธิบายว่าเป็นตารางแฮชที่ใช้กัญชาฟังก์ชันในการคำนวณตำแหน่งในหน่วยความจำ (หรือง่ายขึ้นอาร์เรย์) ที่มีค่าจะเป็น แฮชจะใช้ KEY เป็นอินพุตและให้ค่าเป็นเอาต์พุต จากนั้นเสียบค่านั้นลงในหน่วยความจำหรือดัชนีอาร์เรย์
กล่าวคือ KEY => HASH FUNCTION => VALUE
ฉันเดาว่าหนึ่งโดยตรงในขณะที่คนอื่นไม่ได้ ฟังก์ชันแฮชอาจไม่สมบูรณ์แบบเช่นกันและบางครั้งอาจมีดัชนีที่อ้างอิงถึงค่าที่ผิด แต่นั่นสามารถแก้ไขได้
สถานที่ที่ดีที่สุดในการมองหา: Wikipedia ( อาเรย์แบบเชื่อมโยงและตารางแฮช )
unordered_map
ให้แสดงสิ่งที่พวกเขาทำมากกว่าสิ่งที่พวกเขาเป็น