我正在通過學習Ruby的在線程序學習,其中一個挑戰/課程是編寫一個方法,它接受一個散列值爲全部數字並返回對應於最低值的「鍵」的參數。Float :: INFINITY是做什麼的,爲什麼它對這種排序方法起作用?
我寫了下面的代碼通過了測試,然後顯示了「推薦」的解決方案,這當然是更有效。有人能通過下面的方法的第二個版本來告訴我它是如何完成任務的嗎?
對於挑戰而言,我是不允許使用任何下列方法之一:
#keys
#values
#min
#sort
#min_by
我的解決辦法:
def key_for_min_value(name_hash)
lowest_key = nil
if name_hash != {}
value_array=name_hash.collect do |key,value|
value
end
loop do
swapped = false
(value_array.length-1).times do |i|
if value_array[i] > value_array[i+1]
value_array[i], value_array[i+1] = value_array[i+1], value_array[i]
swapped=true
end
end
break if not swapped
end
name_hash.each do |key,value|
if value == value_array.first
lowest_key = key
end
end
end
lowest_key
end
推薦的解決方案:
def key_for_min_value(hash)
lowest_key = nil
lowest_value = Float::INFINITY
hash.each do |k, v|
if v < lowest_value
lowest_value = v
lowest_key = k
end
end
lowest_key
end
您可以使用reduce來解決這個問題,''{a:1,b:0.1,c:3,d:5 } .reduce {| a,b | a [1]
我強烈建議閱讀http://catb.org/esr/faqs/smart-questions.html,特別是http://catb.org/esr/faqs/smart-questions.html#idm46397818492288。問好問題,不用擔心你做了多久。 「[問]」和「[mcve]」。 –