2012-02-26 108 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