2012-02-26 105 views
-3

我有一個哈希看起來像這樣不能得到正確的格式

products = {199 =>['Shoes', 59.99], 211 =>['Shirts', 19.99], 245 =>['Hats', 25.99], 689 => ['Coats', 99.99], 712 => ['Beanies', 6.99]} 

產品=項目數=> [產品價格]

我的目標是打印出來的最高和最低價格在散列。到目前爲止,我得到的是這樣的:

products = {199 =>['Shoes', 59.99], 211 =>['Shirts', 19.99], 245 =>['Hats', 25.99], 689 =>['Coats', 99.99], 712 => ['Beanies', 6.99]} 

max_value = products.max_by { |key, value| value[1] }.to_s 
    print max_value 

min_value = products.min_by { |key, value| value[1] }.to_s 
    print min_value 

當我打印它看起來像這樣。

["689", ["Coats", 99.99]] 
["712", ["Beanies", 6.99]] 

我想它看起來像這樣

Item# 689: Coats, 99.99 
Item# 712: Beanies, 6.99 

沒有人對我有什麼祕訣嗎?

感謝您的幫助,我找到了答案。非常感謝。這給了我正在尋找的東西。

min_value = products.min_by { |value| value[1] } 
puts "Item# #{min_value[0]}: #{min_value[1][0]}, #{min_value[1][1]}" 

max_value = products.max_by { |value| value[1] } 
puts "Item# #{max_value[0]}: #{max_value[1][0]}, #{max_value[1][1]}" 

OOPS,沒關係。正確的代碼是這個

min_value = products.min_by { |key, value| value[1] } 
puts "Item# #{min_value[0]}: #{min_value[1][0]}, $#{min_value[1][1]}" 

max_value = products.max_by { |key, value| value[1] } 
puts "Item# #{max_value[0]}: #{max_value[1][0]}, $#{max_value[1][1]}" 
+2

您如何預計它會發現這是您想要打印的內容?你告訴它打印一個數組,所以這就是它的作用。沒有關於「Item#」的任何內容,等等。只需將你想要的值從你得到的數組中拉出來並單獨打印出來。 – 2012-02-26 23:48:51

+0

您可以通過點擊答案投票計數下的複選框來接受堆棧溢出的答案。這可以讓人們知道答案就是你正在尋找的東西,而且他們不會重複答案。 – Linuxios 2012-02-27 02:33:56

回答

2

假設max是所述第二陣列和min是第一:

puts "Min Item\# #{min[0]}: #{min[1][0]}, #{min[1][1]}" 
puts "Max Item\# #{max[0]}: #{max[1][0]}, #{max[1][1]}" 

通常,在紅寶石基本格式可以使用字符串插值算,#{}內完成一個雙引號字符串。在調用to_s之後,操作員用包含的表達式的最終值替換自己。例:

puts "Four plus four = #{4+4}" 

4+4值是8,並8.to_s = "8",因此字符串"8"插入使得最終的字符串"Four plus four = 8"

對於模式複雜的格式,你將使用sprintf,但是這是一個巨大的功能,你可以看看自己。

+0

不要忘記'min = products.min_by {| key,value |值[1]}'和最大等價線。 – 2012-02-27 00:10:04

+0

我知道,我只是假設他們的解決方式與問題中的方式相同。 – Linuxios 2012-02-27 00:26:03

+0

好的。我只是想指出,因爲最終刪除'to_s'是至關重要的。 – 2012-02-27 00:26:51