‫ในบทเรียนนี้ เราจะพูดถึงตารางแฮช และเราจะดูพจนานุกรมในภายหลังด้วย
‫ดังนั้นตารางแฮชและพจนานุกรมจึงเป็นคอลเล็กชันที่มีประโยชน์ที่สุดใน C sharp
‫ดังนั้นเราจะมาดูกันว่าจะนิยามพวกมันอย่างไรและใช้งานอย่างไร และในกรณีใด เราควรใช้ประโยชน์จากสิ่งเหล่านี้
‫เพื่อทำความเข้าใจแนวคิดของการแฮชและตาราง
‫ขั้นแรก ให้นึกถึงพจนานุกรมของจริง
‫สมมติว่าเรามีพจนานุกรมภาษาเยอรมันและภาษาอังกฤษซึ่งทุกคำในภาษาเยอรมันตรงกับคำในภาษาอังกฤษเพียงคำเดียว
‫เพราะนั่นจะเป็นการจำกัดข้อจำกัดที่นี่
‫ดังนั้นเมื่อเราลองแปลคำว่า auto ซึ่งในภาษาเยอรมันโดยพื้นฐานแล้วแปลเป็นภาษาอังกฤษว่า
‫car เราใช้คำหนึ่งคำเป็นคำสำคัญที่เราสามารถค้นหาได้ ตัวอย่างเช่น เราได้รับคำแปลหนึ่งคำ
‫จึงมีความสัมพันธ์แบบ 1 ต่อ 1 อยู่เสมอ
‫ดังนั้นเราจึงมีรถยนต์และที่แปลเป็นรถยนต์ และเราสามารถบรรลุสิ่งนั้นได้อย่างแม่นยำด้วยการใช้ตารางแฮช
‫และเราจะใช้สิ่งนี้ในตัวอย่างที่เฉพาะเจาะจงมากที่นี่
‫สมมติว่าเรามีระบบการลงทะเบียนนักเรียนที่นักเรียนทุกคนมีบัตรประจำตัวและข้อมูลอื่น
‫ๆ อีกมากมาย เช่น ชื่อ อายุ เกรดและรูปภาพ เป็นต้น
‫เพื่อให้ระบบดังกล่าวใช้งานได้ เราจำเป็นต้องมี ID พิเศษสำหรับนักเรียนทุกคน
‫จึงต้องมีเอกลักษณ์เฉพาะตัว
‫หากเราต้องจัดเก็บข้อมูลนี้โดยใช้ตารางแฮชหรือพจนานุกรม รหัสนักศึกษาจะเป็นกุญแจ
‫และข้อมูลของนักเรียนจะเป็นวัตถุที่มีข้อมูลของนักเรียนอื่นๆ ทั้งหมด และนั่นจะเป็นค่า
‫ดังนั้นเราจึงมีคู่ค่าคีย์นี้เสมอ
‫นี่คือวิธีที่คุณสามารถค้นหาข้อมูลจริงได้ และนี่คือค่าที่อยู่เบื้องหลัง
‫ดังนั้นคุณสามารถเห็นมันเหมือนล็อกเกอร์
‫นี่คือ ID ของตู้เก็บของหรือที่ตั้งของตู้เก็บของ
‫อาจเป็นข้อมูลประเภทต่างๆ
‫ไม่จำเป็นต้องเป็น ID และนี่จะเป็นค่า
‫ดังนั้นพจนานุกรม พวกมันจะต้องเป็นประเภทเดียวกันในตารางแฮช
‫พวกเขาสามารถเป็นประเภทต่างๆ
‫นี่อาจเป็นจำนวนเต็มและนี่อาจเป็นอ็อบเจกต์ เป็นต้น
‫เราจะมาดูตารางแฮชกันก่อน
‫ดังนั้นเราจะสร้างคลาสใหม่หรือที่จริงแล้วฉันได้เตรียมคลาสใหม่สำหรับสิ่งนี้
‫มาลงไว้ที่นี่กันเถอะ
‫และมีคุณสมบัติสองสามอย่าง
‫มีคุณสมบัติ ID คุณสมบัติชื่อและเกรดเฉลี่ย
‫แล้วเราก็มีคอนสตรัคเตอร์ที่ง่ายมาก เพียงแค่กำหนดค่า
‫ดังนั้น ID ใด ๆ ที่เราส่งผ่านไปยังวัตถุของนักเรียนเมื่อเราสร้าง จะเป็น ID ของวัตถุของนักเรียนเป็นต้น
‫ไม่มีอะไรแฟนซีเกินไปที่นี่
‫เรากำลังใช้ชั้นเรียนปกติตามที่เราได้กล่าวถึงในบทของชั้นเรียน
‫ตอนนี้ เราสามารถไปข้างหน้าและสร้างคลาสนี้ในไฟล์แยกต่างหาก เพื่อที่เราจะได้เปิดโปรแกรมสำรวจโซลูชันของเรา
‫ไปข้างหน้าและสร้างไฟล์ใหม่ที่นี่
‫ดังนั้นเพิ่มรายการใหม่หรือชั้นเรียนใหม่เช่นนั้นและเรียกมันว่านักเรียน
‫แต่สำหรับตัวอย่างนี้ ฉันจะทำให้มันเรียบง่ายและรวมเป็นไฟล์เดียว
‫อย่างที่คุณทราบ แนวทางปฏิบัติที่ดีที่สุดคือให้ใส่ไว้ในไฟล์แยกกัน เพื่อที่คุณจะได้ไม่ต้องผสมสิ่งต่าง
‫ๆ และคุณสามารถค้นหาไฟล์และคลาสและทั้งหมดนั้นได้ง่ายขึ้น
‫เอาล่ะ ตอนนี้เรามีชั้นเรียนสำหรับนักเรียนแล้ว เราจึงสามารถสร้างตารางแฮชได้
‫ดังนั้นภายในโปรแกรมของเราที่นี่ ในวิธีการหลัก นั่นคือที่ที่ฉันจะกำหนดตารางแฮชใหม่
‫และมันจะเป็นตารางแฮชที่เหมือนกัน
‫และผมจะเรียกอันนี้ว่า ตารางเดียว ซึ่งจะเป็นตารางแฮชใหม่
‫คลาสตารางแฮชอยู่ในคอลเล็กชันระบบ เราจึงต้องเพิ่มเนมสเปซนี้ที่นี่โดยใช้คอลเล็กชันระบบ
‫ดังนั้นตารางแฮชและมันต่างจากเนมสเปซตารางแฮชเพราะนั่นคือวิธีที่ฉันเรียก ซึ่งอาจทำให้
‫ID ของเราสับสนที่นี่ หากเราต้องการป้อนตารางแฮชโดยไม่ต้องเพิ่มเนมสเปซนี้ในโปรเจ็กต์ของเรา
‫แต่ตอนนี้เรามีมันในคลาสโปรแกรมของเราแล้ว เราก็สามารถใช้งานได้
‫ดังนั้นเราจึงมีตารางแฮชใหม่นี้ ซึ่งตอนนี้จะเป็นตารางข้อมูล และเราสามารถใส่ข้อมูลที่เราต้องการลงไปได้
‫นี่คือวิธีที่คุณสามารถสร้างตารางแฮชได้ วิธีที่คุณสามารถเริ่มต้นกับอ็อบเจ็กต์ตารางแฮชที่ว่างเปล่าเหมือนที่เราทำที่นี่
‫ตอนนี้ สิ่งที่เราทำได้คือเราสามารถกำหนดค่าให้กับตารางแฮชนี้ และเราสามารถเรียกมันว่าตารางของนักเรียนเพื่อทำให้โค้ดของเราอ่านง่ายขึ้นอีกเล็กน้อย
‫ตอนนี้เราแค่ต้องสร้างกลุ่มนักเรียนที่เราต้องการให้มีในตารางของเรา
‫ขอผมเพิ่มสิ่งเหล่านั้นในนี้ด้วย
‫ฉันจะเรียกพวกเขาว่าสตั๊ดหนึ่งสถิติ 2 ถึง 3 ขั้นตอนที่สี่ และพวกเขาทั้งหมดจะเป็นวัตถุใหม่สำหรับนักเรียน
‫นี่จะเป็นนักเรียนที่มีบัตรประจำตัว คนหนึ่งคือมาเรีย
‫เธอมีเกรดเฉลี่ย 98
‫จากนั้นเรามี JSON ซึ่งจะมี ID หนึ่งตัว
‫นี่คือรหัสที่นี่ ตัวระบุที่ไม่ซ้ำกัน ตามด้วยเกรดเฉลี่ยที่นักเรียนมี
‫ตกลง.
‫ตอนนี้เรามีนักเรียนทั้งหมดแล้ว และเราสามารถกำหนดนักเรียนในตารางนักเรียนของเราโดยใช้รหัสนักเรียน
‫และแนวปฏิบัติที่ดีคือ ไปข้างหน้าและพักตารางของนักเรียน ดอท แอด และที่นี่เราใช้ ID ตัวเดียวของนักเรียน
‫ดังนั้นคุณสมบัตินี้จึงเป็นกุญแจสำคัญ
‫ดังนั้น คุณสามารถเห็นตารางแฮชที่นี่ทำให้เรามีคีย์ของวัตถุประเภท ดังนั้นจึงสามารถเป็นวัตถุประเภทใดก็ได้เป็นคีย์
‫และอาจเป็นออบเจ็กต์ที่ไม่บังคับหรือสามารถทราบได้เป็นค่า
‫ดังนั้นเราจึงสามารถกำหนดค่าหรือเป็นค่าว่างได้
‫ตกลง แต่เราจะกำหนดค่าและนั่นจะเป็นค่าของนักเรียนเองเช่นนั้น
‫ตอนนี้เราได้เพิ่มนักเรียนของเราลงในตารางนักเรียนของเรา และเราสามารถทำสิ่งเดียวกันกับนักเรียนคนอื่นๆ
‫ได้ และเราจะใช้ ID ของนักเรียนแต่ละคน
‫ลองใช้ตารางนักเรียนที่นี่สำหรับพวกเขาทั้งหมด
‫ตกลง.
‫นั่นคือตารางแฮชของเราในตอนนี้ แต่เราจะดึงรายการได้อย่างไร
‫แล้วเราจะดึงข้อมูลรายการจากตารางแฮชได้อย่างไร?
‫มาดูวิธีการต่างๆ กัน
‫อย่างแรกที่เราทำได้คือสร้างวัตถุของนักเรียนที่นี่
‫ดังนั้นนักเรียนและวัตถุนี้จะถูกเรียกว่านักเรียนที่เก็บไว้
‫ผมจะได้ค่านักเรียนจากตารางของผม
‫ในกรณีนี้ มันคือโต๊ะนักเรียน
‫ตารางนักเรียนเป็นเช่นนั้น
‫และที่นี่คล้ายกับวิธีที่ฉันเข้าถึงในอาร์เรย์
‫X เป็นค่าในอาร์เรย์อย่างไร ฉันสามารถเข้าถึงได้โดยใช้ ID
‫ตัวอย่างเช่น สมมุติว่าผมอยากได้ตัวที่ ID one แบบนี้
‫ปัญหาก็คือว่าตารางแฮชนี้สามารถมีค่าที่เป็นประเภทอ็อบเจกต์ได้ อย่างที่เราเห็นก่อนหน้านี้
‫ดังนั้น หากเราเรียกใช้วิธีการเพิ่ม คุณจะเห็นว่าเราสามารถกำหนดคีย์ได้ แต่จากนั้นค่าจะเป็นของประเภทวัตถุ
‫และนั่นหมายความว่านี่จะเป็นของประเภทวัตถุ
‫แต่เราไม่สามารถกำหนดประเภทวัตถุให้กับนักเรียนได้
‫ต้องปิดประเภทนักเรียนเพราะนักเรียนที่เก็บไว้คนนี้ในความเป็นจริงของนักเรียนประเภท
‫ดังนั้นเราต้องแน่ใจว่าเราใส่มันเข้าไปในนักเรียนที่นี่แล้วสิ่งนี้จะได้ผล
‫โอเค เรากำลังแคสต์วัตถุนี้ให้เป็นนักเรียนเพราะเรารู้ว่าในตารางของนักเรียนอยู่ที่ตำแหน่งที่หนึ่ง
‫ดังนั้นที่ ID one ค่าจะเป็นจริงของ type student
‫ดังนั้นที่นี่คุณสามารถรับนักเรียนได้ที่ ID one คุณสามารถรับนักเรียนที่ ID two และอื่นๆ
‫แต่นั่นก็ใช้ได้เพราะเรารู้ว่าเรากำลังใช้ตัวเลขเหล่านี้อยู่
‫ดังนั้นหากคุณต้องการได้รับมัน มิฉะนั้น คุณสามารถใช้อันที่สามด้วย ID
‫ดังนั้นตอนนี้จะให้คุณค่าที่อยู่เบื้องหลัง ID นักเรียนหนึ่งคน
‫โดยพื้นฐานแล้วนี่จะให้ค่านี่กับคุณหรือนักเรียนคนนี้ที่นี่
‫และนี่คืออันนี้
‫อันนี้ตรงนี้ เพราะนั่นคือสิ่งที่เราเก็บไว้ที่ ID นี้
‫ดังนั้นตอนนี้ เราสามารถไปข้างหน้า และทำสิ่งนี้ โดยที่ตอนนี้เราแทนที่จะเขียน Hello world เราจะเขียนสิ่งที่มีประโยชน์จริง
‫ๆ โดยที่เราเขียน ID นักศึกษา ชื่อของนักเรียน ตลอดจนเกรดเฉลี่ยของเขา
‫เราจะใช้รหัสหนึ่งดอทของนักเรียนที่เก็บไว้
‫ดังนั้นเราจึงได้บัตรประจำตัวของเขา เราได้รับชื่อของเขา และเราได้เกรดเฉลี่ยของเขา
‫และในกรณีนี้ มันคือเกรดเฉลี่ยของเธอและอื่น ๆ เพราะเป็นมาเรียที่ตำแหน่งหนึ่งที่ ID หนึ่ง
‫โอเค เรามาเริ่มกันเลย และคุณจะเห็น ID นักเรียนหนึ่งชื่อคือ Maria และ GPA คือ 98
‫ที่นี่เราเห็นว่าเราสามารถสร้างตารางแฮชได้อย่างไร
‫นี่คือวิธีที่เราสามารถเก็บข้อมูลในตารางแฮช
‫อันที่จริงนี่คือที่ที่เราจัดเก็บข้อมูลในตารางแฮช
‫และนี่คือวิธีที่เราสามารถดึงข้อมูลจากตารางแฮช
‫ตอนนี้ สมมติว่าเราต้องการพิมพ์ข้อมูลทั้งหมดภายในตารางแฮชของเรา และเราไม่มีคีย์เฉพาะในการกำจัดของเรา
‫เราสามารถทำได้โดยรับคีย์ทั้งหมดจากตารางแฮชเพื่อแก้ปัญหานี้
‫อันดับแรก เราต้องพูดถึงโครงสร้างที่เรียกว่ารายการพจนานุกรม
‫เมื่อใดก็ตามที่เราเพิ่มรายการใหม่ในตารางแฮชของเรา
‫ดังนั้นคู่ค่าคีย์ของเรา ออบเจ็กต์การป้อนพจนานุกรมใหม่จะถูกสร้างขึ้นสำหรับเรา และมันจะถูกแทรกลงในตารางแฮชของเรา
‫ซึ่งหมายความว่าตารางแฮชนั้นเป็นชุดของรายการพจนานุกรม
‫ดังนั้นโดยใช้วัตถุชั่วคราวของรายการพจนานุกรม เราสามารถผ่านตารางแฮชของเราโดยใช้ a สำหรับแต่ละลูป
‫ลองดูสิ่งนี้ในตัวอย่างนี้ โดยที่ฉันจะไปข้างหน้าและใช้ a สำหรับแต่ละลูปที่นี่
‫และนี่สำหรับลูปแต่ละประเภทจะเป็นรายการพจนานุกรม
‫นั่นคือโครงสร้างที่ฉันพูดถึง
‫คุณสามารถดูได้ที่นี่ struct รายการพจนานุกรม
‫แล้วไอเทมที่ฉันจะใช้ชื่ออะไรล่ะ?
‫ฉันจะใช้รายการ
‫แน่นอน คุณสามารถเรียกนักเรียนคนนี้หรืออะไรก็ได้เพราะคุณรู้ว่าผลงานจะเป็นนักเรียนประเภท
‫แต่สมมติว่าคุณไม่รู้จักและเรียกอีกอย่างว่ารายการก็ได้
‫แล้วคอลเล็กชันที่เราอยากจะรันนี่คืออะไร หรือเราต้องการได้ค่าจากอะไร และนั่นจะเป็นตารางนักเรียนของเรา
‫ตัวนี้เลยเอาคืน
‫แต่ละรายการที่มี ID ที่รู้จัก
‫และที่นี่.
‫ดึงค่าทั้งหมดจากตารางแฮช
‫ตกลง.
‫ดังนั้นรายการในตารางแฮชของเราจึงเป็นรายการพจนานุกรมประเภทดังที่ฉันพูดไป
‫สิ่งนี้ทำให้เราสามารถผ่านมันไปได้ในตอนนี้
‫ตาราง ตารางนักเรียน และโดยทั่วไปจะแสดงค่าต่างๆ
‫ดังนั้นที่นี่ เนื่องจาก entry value จะส่งกลับอ็อบเจ็กต์ คุณสามารถดูได้ที่นี่ว่าอ็อบเจกต์
‫แต่สิ่งที่เราต้องการเพื่อให้ได้รายละเอียดของนักเรียนจะเป็นวัตถุของนักเรียน
‫สิ่งที่เราจะต้องทำคือเราจะต้องทำดังต่อไปนี้
‫ดังนั้นเราจึงสร้างค่าชั่วคราว ซึ่งจะเป็นค่าเข้าของเรา
‫ตอนนี้เรามีปัญหาแบบเดียวกับที่เรามีบนนี้ ซึ่งเราต้องโยนสิ่งนี้เป็นนักเรียนเพราะมันเป็นแค่สิ่งของใช่ไหม
‫แต่เราต้องการให้เป็นแบบนักเรียนเพื่อให้เราสามารถเข้าถึงคุณสมบัติของนักเรียนได้
‫ดังนั้น เพราะมิฉะนั้น entry value dot มันไม่มี ID ที่นี่ ฉันไม่สามารถเข้าถึง ID ของมันได้ ฉันไม่สามารถเข้าถึงชื่อของมัน
‫ทุกสิ่งนั้นแม้ว่าจะมีอยู่ในนั้น
‫แต่ ID ของเราไม่อนุญาตเพราะก่อนอื่นเราต้องแน่ใจว่าเราแปลงหรือแปลงค่าเป็นประเภทที่ถูกต้องซึ่งจะเป็นนักเรียนประเภทของเรา
‫ตอนนี้เรากำลังแคสต์ เรากำลังจัดเก็บไว้ชั่วคราว และตอนนี้เราสามารถดำเนินการต่อและเขียนค่าแต่ละค่าลงในคอนโซลของเราได้
‫ตัวอย่างเช่น หรือใช้โปรแกรมของเราตามที่เราต้องการ
‫ดังนั้นที่นี่เราจึงสามารถใช้รหัสนักศึกษาโดยใช้รหัสเทมเพลตได้ เนื่องจากตอนนี้ temp เป็นประเภทนักเรียนและนักเรียนมีชื่อรหัส
‫GPA และเราสามารถเข้าถึงสิ่งเหล่านั้นทั้งหมดเพื่อทำซ้ำผ่านรายชื่อนักเรียนทั้งหมดของเรา
‫เรามาทำกันอย่างรวดเร็วกันเถอะ
‫มารันโค้ดของเรากันและดูว่าสิ่งนี้สำหรับแต่ละลูปทำอะไรให้เราบ้าง เพื่อให้คุณเห็นว่ามันผ่านมันไปได้
‫มันบอกว่า.
‫นักเรียนสี่สตีฟ
‫นักเรียนสามคน Sclera
‫นักเรียนสองคนคือเจสันและอีกคนคือมาเรีย
‫ดังนั้นคุณจะเห็นว่ามันเปลี่ยนจากด้านหลังเป็นหลุม โดยเริ่มจากรายการสุดท้ายและขึ้นไปยังรายการแรก
‫ทีนี้ นั่นคือถ้า ณ จุดนี้เราไม่รู้ว่าเป็นนักเรียนหรือเปล่า แม้ว่าเราจะแปลงเป็นนักเรียนแล้วก็ตาม
‫นี่เป็นเพียงการแสดงให้คุณเห็นว่าตารางแฮชเป็นเพียงชุดของรายการพจนานุกรมเท่านั้น
‫ลองดูว่าเราจะทำให้สิ่งนี้ง่ายขึ้นสำหรับแต่ละลูปได้อย่างไร
‫เราสามารถทำให้มันง่ายขึ้นโดยบอกจริง ๆ แล้วสำหรับแต่ละประเภทตัวแปรจะเป็นนักเรียน
‫ชื่อรายการ เรียกว่า นักเรียนก็ได้
‫ฉันจะเรียกมันว่าค่าเหมือน
‫ก็ไม่เป็นไร
‫และคอลเล็กชันที่ฉันต้องการจะผ่าน จะเป็นตารางในขณะที่ตารางของนักเรียนจุดค่า
‫ดังนั้นจึงมีคอลเลกชัน AI ของค่าตารางแฮช
‫รับคอลเล็กชัน AI ที่มีค่าในตารางแฮช
‫สิ่งนี้ทำให้เราสามารถผ่านค่าต่างๆ ได้โดยตรงโดยไม่ต้องทำ
‫โดยพื้นฐานแล้ว ทำในสิ่งที่เราทำที่นี่ ที่เราแปลงมันหรือที่เราโยนมันเป็นวัตถุของนักเรียน
‫ดังนั้นตอนนี้เราสามารถไปข้างหน้าและ
‫ทำแบบเดียวกับที่เราทำที่นี่
‫แต่ตอนนี้ แน่นอน มันจะเป็นค่า ID และอื่น ๆ เพราะมันไม่ใช่รายการ และไม่ใช่ชั่วคราว แต่มันจะเป็นค่าจริง
‫เพราะนั่นคือสิ่งที่สำหรับแต่ละกลุ่ม
‫ทำให้เราทำซ้ำแต่ละครั้ง โดยผ่านคุณค่าทั้งหมดที่เรามี
‫และค่าจะเป็นค่าส่วนบุคคลที่เรากำลังมองหาสำหรับการวนซ้ำนั้น
‫ดังนั้นในการทำซ้ำครั้งแรกก็จะเป็น
‫สตีฟ.
‫จากนั้นก็จะเป็นคลาร่า แล้วก็เจสัน แล้วก็มาเรีย
‫ดังนั้นถ้าเรากำจัดบรรทัดนี้ตรงนี้หรือสำหรับแต่ละลูปแล้วรันอีกครั้ง เราจะเห็นว่าเราได้ผลลัพธ์เหมือนเดิม
‫ดังนั้น สตีฟ คลารา เจสัน และมาเรีย
‫ตกลง.
‫นั่นคือบทนำสั้นๆ เกี่ยวกับตารางแฮชและวิดีโอถัดไป ฉันจะมีความท้าทายเล็กน้อยสำหรับคุณ
‫โดยพื้นฐานแล้วคุณจะต้องขยายโค้ดของคุณเล็กน้อยเพื่อให้เข้าใจตารางแฮชได้ดีขึ้นเล็กน้อย
‫แล้วเราจะไปดูพจนานุกรมกัน