ทับทิม - แฮช
แฮชคือชุดของคู่คีย์ - ค่าดังนี้ "พนักงาน" => "เงินเดือน" มันคล้ายกับ Array ยกเว้นว่าการจัดทำดัชนีจะทำผ่านคีย์โดยพลการของออบเจ็กต์ประเภทใดก็ได้ไม่ใช่ดัชนีจำนวนเต็ม
ลำดับที่คุณสำรวจแฮชด้วยคีย์หรือค่าอาจดูเหมือนเป็นไปตามอำเภอใจและโดยทั่วไปจะไม่อยู่ในลำดับการแทรก ถ้าคุณพยายามที่จะเข้าถึงกัญชาด้วยที่สำคัญที่ไม่ได้อยู่ที่วิธีการที่จะกลับมาเป็นศูนย์
การสร้างแฮช
มีหลายวิธีในการสร้างแฮชเช่นเดียวกับอาร์เรย์ คุณสามารถสร้างแฮชว่างด้วยเมธอดคลาสใหม่ -
months = Hash.new
คุณยังสามารถใช้newเพื่อสร้างแฮชที่มีค่าดีฟอลต์ซึ่งมิฉะนั้นจะเป็นเพียงศูนย์ -
months = Hash.new( "month" )
or
months = Hash.new "month"
เมื่อคุณเข้าถึงคีย์ใด ๆ ในแฮชที่มีค่าดีฟอลต์หากคีย์หรือค่านั้นไม่มีอยู่การเข้าถึงแฮชจะคืนค่าเริ่มต้น -
#!/usr/bin/ruby
months = Hash.new( "month" )
puts "#{months[0]}"
puts "#{months[72]}"
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
month
month
#!/usr/bin/ruby
H = Hash["a" => 100, "b" => 200]
puts "#{H['a']}"
puts "#{H['b']}"
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
100
200
คุณสามารถใช้ออบเจ็กต์ Ruby เป็นคีย์หรือค่าได้แม้กระทั่งอาร์เรย์ดังนั้นตัวอย่างต่อไปนี้จึงเป็นตัวอย่างที่ถูกต้อง -
[1,"jan"] => "January"
แฮชวิธีการในตัว
เราจำเป็นต้องมีอินสแตนซ์ของวัตถุ Hash เพื่อเรียกใช้เมธอด Hash ดังที่เราได้เห็นแล้วต่อไปนี้เป็นวิธีสร้างอินสแตนซ์ของวัตถุ Hash -
Hash[[key =>|, value]* ] or
Hash.new [or] Hash.new(obj) [or]
Hash.new { |hash, key| block }
สิ่งนี้จะส่งคืนแฮชใหม่ที่สร้างขึ้นพร้อมกับอ็อบเจ็กต์ที่กำหนด ขณะนี้ใช้วัตถุที่สร้างขึ้นเราสามารถเรียกวิธีการอินสแตนซ์ที่มีอยู่ ตัวอย่างเช่น -
#!/usr/bin/ruby
$, = ", "
months = Hash.new( "month" )
months = {"1" => "January", "2" => "February"}
keys = months.keys
puts "#{keys}"
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
["1", "2"]
ต่อไปนี้เป็นวิธีแฮชสาธารณะ (สมมติว่าแฮชเป็นวัตถุอาร์เรย์) -
ซีเนียร์ | วิธีการและคำอธิบาย |
---|---|
1 | hash == other_hash ทดสอบว่าแฮชสองตัวมีค่าเท่ากันหรือไม่โดยพิจารณาว่ามีจำนวนคู่คีย์ - ค่าเท่ากันหรือไม่และคู่คีย์ - ค่าตรงกับคู่ที่เกี่ยวข้องในแต่ละแฮชหรือไม่ |
2 | hash.[key] ใช้คีย์อ้างอิงค่าจากแฮช หากไม่พบคีย์จะส่งคืนค่าเริ่มต้น |
3 | hash.[key] = value Associates มูลค่าที่ได้รับจากค่าที่มีคีย์ที่กำหนดโดยที่สำคัญ |
4 | hash.clear ลบคู่คีย์ - ค่าทั้งหมดออกจากแฮช |
5 | hash.default(key = nil) ส่งคืนค่าเริ่มต้นสำหรับแฮชศูนย์หากไม่ได้ตั้งค่าโดยค่าเริ่มต้น = ([] ส่งคืนค่าดีฟอลต์หากคีย์ไม่มีอยู่ในแฮช ) |
6 | hash.default = obj ตั้งค่าเริ่มต้นสำหรับกัญชา |
7 | hash.default_proc ส่งคืนบล็อกหากแฮชถูกสร้างขึ้นโดยบล็อก |
8 | hash.delete(key) [or] array.delete(key) { |key| block } ลบคู่ค่าคีย์จากกัญชาโดยที่สำคัญ หากใช้บล็อกจะส่งคืนผลลัพธ์ของบล็อกหากไม่พบคู่ เปรียบเทียบdelete_if |
9 | hash.delete_if { |key,value| block } ลบคู่ค่าคีย์จากกัญชาสำหรับทุกคู่ประเมินบล็อกจริง |
10 | hash.each { |key,value| block } ทำซ้ำบนแฮชเรียกบล็อกหนึ่งครั้งสำหรับแต่ละคีย์ส่งผ่านคีย์ - ค่าเป็นอาร์เรย์สององค์ประกอบ |
11 | hash.each_key { |key| block } วนซ้ำแฮชเรียกบล็อกหนึ่งครั้งสำหรับแต่ละคีย์ส่งผ่านคีย์เป็นพารามิเตอร์ |
12 | hash.each_key { |key_value_array| block } วนซ้ำแฮชเรียกบล็อกหนึ่งครั้งสำหรับแต่ละคีย์โดยส่งคีย์และค่าเป็นพารามิเตอร์ |
13 | hash.each_key { |value| block } วนซ้ำแฮชเรียกบล็อกหนึ่งครั้งสำหรับแต่ละคีย์โดยส่งผ่านค่าเป็นพารามิเตอร์ |
14 | hash.empty? ทดสอบว่ากัญชาเป็นที่ว่างเปล่า (ไม่มีคู่ค่าคีย์) กลับมาจริงหรือเท็จ |
15 | hash.fetch(key [, default] ) [or] hash.fetch(key) { | key | block } ส่งกลับค่าจากกัญชาสำหรับรับกุญแจ หากไม่พบคีย์และไม่มีอาร์กิวเมนต์อื่นจะทำให้เกิดข้อยกเว้นIndexError หากกำหนดค่าเริ่มต้นจะถูกส่งกลับ หากระบุบล็อกทางเลือกผลลัพธ์จะถูกส่งกลับ |
16 | hash.has_key?(key) [or] hash.include?(key) [or] hash.key?(key) [or] hash.member?(key) ทดสอบว่าที่กำหนดที่สำคัญในปัจจุบันคือกัญชากลับมาจริงหรือเท็จ |
17 | hash.has_value?(value) ทดสอบว่าแฮชมีค่าที่กำหนดหรือไม่ |
18 | hash.index(value) ส่งคืนคีย์สำหรับค่าที่กำหนดในแฮชศูนย์หากไม่พบค่าที่ตรงกัน |
19 | hash.indexes(keys) ส่งคืนอาร์เรย์ใหม่ที่ประกอบด้วยค่าสำหรับคีย์ที่กำหนด จะแทรกค่าเริ่มต้นสำหรับคีย์ที่ไม่พบ วิธีนี้เลิกใช้แล้ว ใช้เลือก |
20 | hash.indices(keys) ส่งคืนอาร์เรย์ใหม่ที่ประกอบด้วยค่าสำหรับคีย์ที่กำหนด จะแทรกค่าเริ่มต้นสำหรับคีย์ที่ไม่พบ วิธีนี้เลิกใช้แล้ว ใช้เลือก |
21 | hash.inspect ส่งคืนเวอร์ชันสตริงการพิมพ์ที่สวยงามของแฮช |
22 | hash.invert สร้างใหม่กัญชา , inverting คีย์และค่าจากแฮช ; นั่นคือในแฮชใหม่คีย์จากแฮชกลายเป็นค่าและค่ากลายเป็นคีย์ |
23 | hash.keys สร้างอาร์เรย์ใหม่ที่มีกุญแจจากกัญชา |
24 | hash.length ส่งคืนขนาดหรือความยาวของแฮชเป็นจำนวนเต็ม |
25 | hash.merge(other_hash) [or] hash.merge(other_hash) { |key, oldval, newval| block } ส่งกลับกัญชาใหม่ที่มีเนื้อหาของกัญชาและother_hashเขียนทับคู่ในกัญชาด้วยปุ่มซ้ำกันกับผู้ที่มาจากother_hash |
26 | hash.merge!(other_hash) [or] hash.merge!(other_hash) { |key, oldval, newval| block } เช่นเดียวกับการผสาน แต่การเปลี่ยนแปลงจะเสร็จสิ้น |
27 | hash.rehash ฟื้นฟูกัญชาขึ้นอยู่กับค่าปัจจุบันสำหรับแต่ละคีย์ หากค่ามีการเปลี่ยนแปลงนับตั้งแต่ใส่เข้าไปเมธอดนี้จะทำดัชนีแฮชอีกครั้ง |
28 | hash.reject { |key, value| block } สร้างแฮชใหม่สำหรับทุกคู่ที่บล็อกประเมินว่าเป็นจริง |
29 | hash.reject! { |key, value| block } เหมือนกับการปฏิเสธแต่จะมีการเปลี่ยนแปลง |
30 | hash.replace(other_hash) แทนที่เนื้อหาของกัญชาที่มีเนื้อหาของother_hash |
31 | hash.select { |key, value| block } ผลตอบแทนอาร์เรย์ใหม่ประกอบด้วยคู่ค่าคีย์จากกัญชาซึ่งบล็อกผลตอบแทนที่แท้จริง |
32 | hash.shift ลบคู่คีย์ - ค่าออกจากแฮชโดยส่งคืนเป็นอาร์เรย์สององค์ประกอบ |
33 | hash.size ส่งคืนขนาดหรือความยาวของแฮชเป็นจำนวนเต็ม |
34 | hash.sort แปลงแฮชเป็นอาร์เรย์สองมิติที่มีอาร์เรย์ของคู่คีย์ - ค่าจากนั้นจัดเรียงเป็นอาร์เรย์ |
35 | hash.store(key, value) เก็บคู่ค่าคีย์ในกัญชา |
36 | hash.to_a สร้างอาร์เรย์สองมิติจากแฮช คู่คีย์ / ค่าแต่ละคู่จะถูกแปลงเป็นอาร์เรย์และอาร์เรย์ทั้งหมดเหล่านี้จะถูกเก็บไว้ในอาร์เรย์ที่มี |
37 | hash.to_hash ส่งคืนแฮช (ตัวเอง) |
38 | hash.to_s แปลงแฮชเป็นอาร์เรย์จากนั้นแปลงอาร์เรย์นั้นเป็นสตริง |
39 | hash.update(other_hash) [or] hash.update(other_hash) {|key, oldval, newval| block} ส่งกลับกัญชาใหม่ที่มีเนื้อหาของกัญชาและother_hashเขียนทับคู่ในกัญชาด้วยปุ่มซ้ำกันกับผู้ที่มาจากother_hash |
40 | hash.value?(value) ทดสอบว่าแฮชมีค่าที่กำหนดหรือไม่ |
41 | hash.values ส่งคืนอาร์เรย์ใหม่ที่มีค่าแฮชทั้งหมด |
42 | hash.values_at(obj, ...) ส่งคืนอาร์เรย์ใหม่ที่มีค่าจากแฮชที่เชื่อมโยงกับคีย์หรือคีย์ที่กำหนด |