Hash ของ Ruby เป็นโครงสร้างข้อมูลแบบ built-in สำหรับแมปค่ากับคีย์ มีความซับซ้อน O(1)
- ภาษาอื่น ๆ มักมีคลาสหลายแบบสำหรับจัดการคีย์/แวลู แต่ Ruby ใช้คลาส
Hash เพียงตัวเดียวในการจัดการคู่คีย์/แวลู
- เป็นโครงสร้างข้อมูลที่ยืดหยุ่นมาก ใช้ได้หลากหลายนอกเหนือจากอ็อบเจ็กต์ข้อมูล / ดิกชันนารี / แฮชเทเบิล / ลิสต์ที่เรียงลำดับแล้ว
- สามารถใช้อ็อบเจ็กต์แทบทุกชนิดเป็นคีย์ได้ รวมถึงสัญลักษณ์ สตริง และจำนวนเต็ม
- เมธอด
fetch ใช้กำหนดค่าเริ่มต้นได้เมื่อไม่มีคีย์นั้น
- ใช้
delete เพื่อลบคีย์ได้ และการเรียกคีย์ที่ไม่มีอยู่ก็ไม่เป็นปัญหา
- ซ้อนกันได้
- หากไม่มีคีย์นั้นจะคืนค่า
nil แต่สามารถกำหนดค่าเริ่มต้นได้ด้วยพร็อพเพอร์ตี default
- มีโมดูล
Enumerable รวมอยู่ด้วย จึงสามารถวนลูปแฮชได้ด้วยเมธอดอย่าง each, each_key, each_pair, each_value, keys, values เป็นต้น
- สามารถ unpack เนื้อหาในแฮชได้ด้วยตัวดำเนินการ double splat
**
- เมธอดที่มีประโยชน์อื่น ๆ:
any?(key), compact, empty?, merge, hash.eql? obj, except(*keys), reject, filter & select, fetch_values(*keys), has_key?, member?, include?, key?, has_value?, value?, length, size, count, slice(*keys), transform_values, flatten
9 ความคิดเห็น
ทำให้นึกถึงความประทับใจตอนเรียนภาษา c ในมหาวิทยาลัย แล้วได้เจอกับ Python list เป็นครั้งแรกเลยครับ
พยายามจะแปล "Swiss Army knife" เป็น "มีดแมคกาเวอร์" แต่คิดว่าคนสมัยนี้น่าจะไม่เข้าใจ เลยใช้คำว่า "เครื่องมือสารพัดประโยชน์" แทน..
น่าจะพอใช้คำว่า MacGyver ได้อยู่ แต่ถ้าไม่รู้จัก Swiss Army knife มาก่อนก็คงเข้าใจยากเหมือนกันครับ 555
แม้แต่ฉันที่ยังเป็นวัยรุ่นก็เข้าใจได้ ดูเหมือนว่าจะมีคนที่ไม่รู้เรื่องนี้ไม่มากนัก
โอ้ เป็นการค้นพบที่น่าทึ่งจริง ๆ นะครับ ผมคิดจริง ๆ ว่าคงไม่มีทางรู้มาก่อน
ว่าแต่ ในบรรดาผู้ใช้ GeekNews ก็มีวัยรุ่นอยู่ด้วยสินะ.. เจ๋งมากครับ!
ดูเหมือนว่าแม้แต่นักพัฒนาวัยรุ่นก็มีเพิ่มขึ้นอย่างคาดไม่ถึง ทำให้นักพัฒนานักเรียนที่เข้ามาอ่าน GeekNews ค่อย ๆ มีมากขึ้นเช่นกัน
ตัวผมเองก็เพิ่งพ้นช่วงวัยรุ่นมาได้แค่ 9 เดือนเท่านั้น...
'MacGyver' เป็นละครที่หลายคนน่าจะไม่รู้ว่าเคยมีอยู่จริง แต่ดูเหมือนว่าทุกคนจะเข้าใจคำว่า 'มีด MacGyver' กันหมดครับ
ตอนนี้มันคงอยู่ในระดับเดียวกับสุภาษิตแล้ว แบบนี้ก็คงไม่เป็นไรใช่ไหม? อย่างน้อยคนวัย 20 อย่างผมก็เข้าใจครับ :D
อ่า ถ้าเข้าใจก็ถือว่ายืนยันว่าเป็นรุ่นใหญ่เลยนะ :)