ฉันมีแฮชดังต่อไปนี้ {"CA"=>2, "MI"=>1, "NY"=>1}
ฉันจะคืนคู่ค่าคีย์สูงสุดโดยใช้ทับทิมได้อย่างไร ฉันต้องการให้ส่งคืน "CA"
ฉันมีแฮชดังต่อไปนี้ {"CA"=>2, "MI"=>1, "NY"=>1}
ฉันจะคืนคู่ค่าคีย์สูงสุดโดยใช้ทับทิมได้อย่างไร ฉันต้องการให้ส่งคืน "CA"
คำตอบ:
สิ่งนี้จะส่งคืนคู่คีย์ - ค่าแฮชสูงสุดโดยขึ้นอยู่กับค่าขององค์ประกอบแฮช:
def largest_hash_key(hash)
hash.max_by{|k,v| v}
end
ฉันพบวิธีนี้ส่งคืนคีย์ของค่าสูงสุดแรก
hash.key(hash.values.max)
อีกวิธีหนึ่งอาจเป็นดังนี้:
hash.each { |k, v| puts k if v == hash.values.max }
สิ่งนี้จะทำงานผ่านคู่คีย์ - ค่าแต่ละคู่และส่งกลับ (หรือในกรณีนี้ทำให้เป็น) คีย์โดยที่ค่าเท่ากับค่าสูงสุดของค่าทั้งหมด สิ่งนี้ควรส่งคืนมากกว่าหนึ่งคีย์หากมีการเสมอกัน
คุณสามารถใช้วิธีการเลือกหากคุณต้องการให้คู่ค่าคีย์ส่งคืน:
hash.select {|k,v| v == hash.values.max }
หากคุณต้องการดึงข้อมูลคู่ค่าคีย์มากกว่าหนึ่งคู่ตามลำดับ (ใหญ่เป็นอันดับสองเล็กที่สุดเป็นต้น) วิธีที่มีประสิทธิภาพมากขึ้นคือการจัดเรียงแฮชเพียงครั้งเดียวจากนั้นให้ได้ผลลัพธ์ที่ต้องการ
def descend_sort(hash)
hash = hash.sort_by {|k,v| v}.reverse
end
คีย์ของค่าที่มากที่สุด
puts *hash[0][0]
รับสูงสุดและต่ำสุด
puts *hash[0], *hash[hash.length-1]
คู่ค่าคีย์ที่ใหญ่เป็นอันดับ 2
Hash[*hash[1]]
ในการแปลงแฮชอาร์เรย์กลับเป็นแฮช
hash.to_h
วันนี้ฉันทำสิ่งนี้กับปัญหาที่คล้ายกันและลงเอยด้วยสิ่งนี้:
hash = { "CA"=>2, "MI"=>1, "NY"=>1 }
hash.invert.max&.last
=> "CA"
สำหรับ Ruby ที่น้อยกว่า 2.3 คุณสามารถแทนที่&.last
ด้วย.try(:last)
อย่างใดอย่างหนึ่งเป็นเพียงตัวป้องกันหากแฮชต้นทางของคุณว่างเปล่า:{}
สิ่งนี้จะส่งคืนคีย์สุดท้ายของแฮชที่จัดเรียงตามขนาด อย่างไรก็ตามอาจมีสองคีย์ที่มีค่าเดียวกัน
def largest_hash_key(hash)
key = hash.sort{|a,b| a[1] <=> b[1]}.last
puts key
end
hash = { "n" => 100, "m" => 100, "y" => 300, "d" => 200, "a" => 0 }
largest_hash_key(hash)