.max / .min的语法和哈希值的总和

时间:2009-11-06 06:24:44

标签: ruby

尝试从哈希中的二维数组中获取值并确定其最大值或最小值

这是我到目前为止所拥有的

pretend_hash = { 333 => [Dog,19.99], 222=> [Cat,25.55] }

if a == 5                    # Loop for view highest priced product"
 puts "View highest priced product"
 puts pretend_hash.values.max 
end

因此,默认情况下,这将返回数组第一部分中的最高字母值 哪个是狗。如何访问阵列的第二部分,其中25.55被声明为.max值?像pretend_hash.values.max [| k,v,z |打印z] 还是反过来?

我遇到的另一个问题是迭代第二个哈希元素并确定总和。再次调用数组中的第二个元素是我无法找到的语法。我的意思是不难说19.99 + 25.55 =一些变量并将其猛击成一个看跌期权。我假设它是这样的:

pretend_hash.sum{|k,v,z| ?? } 

#I assume it iterates through the z element
#and adds all current z values and returns the sum?

2 个答案:

答案 0 :(得分:1)

最小/最大可以这样解决:

pretend_hash.values.sort{|x,y| x[1] <=> y[1]}[0] # Gives min, -1 will be max

或者:

pretend_hash.values.map{|x| x[1]}.max

总结可以这样:

pretend_hash.values.inject(0){|sum,x| sum+x[1]}

答案 1 :(得分:1)

    pretend_hash = { 333 => ["Dog",19.99], 222=> ["Cat",25.55] }


    key,value = pretend_hash.max{|a,b| b[1] <=> a[1]}
    puts key.to_s
    puts value.join(',')


    puts pretend_hash.inject(0){|sum, hash| sum + hash[1][1]}.to_s

#returns:
#222
#Cat,25.55
#45.54