我有这个哈希数组:
@results = [{:res=>88, :name=>"anna"}, {:res=>39, :name=>"dan"}, {:res=>39, :name=>"cain"}, {:res=>33, :name=>"billy"}]
我正在尝试按结果对它进行排序,然后命名:
@results.sort_by!{ |h| [h.res, h.name] }.reverse!
我收到此错误:
undefined method `res' for {:res=>39, :name=>"cain"}:Hash
请提出任何想法。
答案 0 :(得分:1)
与JavaScript不同,您无法在哈希上调用h.res
来获取res
的值。您必须使用[]
运算符来完成此操作:
@results.sort_by! { |h| [h[:res], h[:name]] }.reverse!
答案 1 :(得分:1)
这也做同样的事情:
@results = [{:res=>88, :name=>"anna"}, {:res=>39, :name=>"dan"}, {:res=>39, :name=>"cain"}, {:res=>33, :name=>"billy"}]
@results.sort_by! { |h| h[:res] }
答案 2 :(得分:1)
交叉条件参数以便按相反的方向按名称排序:
results.sort{ |h1, h2| [h2[:res], h2[:name]] <=> [h2[:res], h2[:name]] }
#=> [{:res=>88, :name=>"anna"}, {:res=>39, :name=>"dan"}, {:res=>39, :name=>"cain"}, {:res=>33, :name=>"billy"}, {:res=>33, :name=>"al"}]
results.sort{ |h1, h2| [h2[:res], h1[:name]] <=> [h1[:res], h2[:name]] }
#=> [{:res=>88, :name=>"anna"}, {:res=>39, :name=>"cain"}, {:res=>39, :name=>"dan"}, {:res=>33, :name=>"al"}, {:res=>33, :name=>"billy"}]
答案 3 :(得分:0)
您可以使用Enumerable#max_by(带有一个参数)。
@results.max_by(@results.size) { |h| h.values_at(:res, :name) }
#=> [{:res=>88, :name=>"anna"}, {:res=>39, :name=>"dan"},
# {:res=>39, :name=>"cain"}, {:res=>33, :name=>"billy"}]