获得哈希
问题描述:
我有这样的哈希值的数组,这是由价值:a
分类的一个子:获得哈希
[{:a=>0, :b=>10}, {:a=>0, :b=>35}, {:a=>1, :b=>20}, {:a=>2, :b=>0}]
我怎样才能得到这个数组与最小值的散列的一个子集为:a
? 这里,:a
最小值为0
,所以我需要:
[{:a=>0, :b=>10}, {:a=>0, :b=>35}]
答
对我来说似乎是公认的答案,使假设数组中的第一个元素的:a
值最小。所以如果数组在第一个元素:a => 1
处被修改,那么结果是不正确的。这里的例子:
# original
z = [{:a=>0, :b=>10}, {:a=>0, :b=>35}, {:a=>1, :b=>20}, {:a=>2, :b=>0}]
puts z.select{|y| y[:a] == z.first[:a]}.inspect
# => [{:a=>0, :b=>10}, {:a=>0, :b=>35}] the result is the expected one
# modified :a of first element
z = [{:a=>1, :b=>10}, {:a=>0, :b=>35}, {:a=>1, :b=>20}, {:a=>2, :b=>0}]
puts z.select{|y| y[:a] == z.first[:a]}.inspect
# => [{:a=>1, :b=>10}, {:a=>1, :b=>20}] here result does not have min :a
现在不做这种假设我正在寻找的:a
z = [{:a=>0, :b=>10}, {:a=>0, :b=>35}, {:a=>1, :b=>20}, {:a=>2, :b=>0}]
# find the min :a
m = z.map { |y| y[:a] }.min
puts z.select{|y| y[:a] == m}.inspect
# => [{:a=>0, :b=>10}, {:a=>0, :b=>35}]
# modified :a of first element
z = [{:a=>1, :b=>10}, {:a=>0, :b=>35}, {:a=>1, :b=>20}, {:a=>2, :b=>0}]
m = z.map { |y| y[:a] }.min
puts z.select{|y| y[:a] == m}.inspect
# => [{:a=>0, :b=>35}]
答
z = [{:a=>0, :b=>10}, {:a=>0, :b=>35}, {:a=>1, :b=>20}, {:a=>2, :b=>0}]
z.select{|y| y[:a] == z.first[:a]}
+0
酷,许多THX ... – ctp
马克嗨,我 最小值的额外步骤甚至没有注意到我遇到的麻烦之前,非常感谢! – ctp
其实这个问题本身提到“我有这样一个哈希数组,这是排序的价值为:a”,这是我从哪里得到的假设:) –
你是完全正确的。我应该仔细阅读。 – Marc