我有這樣的哈希值的數組,這是由價值: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=>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]}
酷,許多THX ... – ctp
馬克嗨,我 最小值的額外步驟甚至沒有注意到我遇到的麻煩之前,非常感謝! – ctp
其實這個問題本身提到「我有這樣一個哈希數組,這是排序的價值爲:a」,這是我從哪裏得到的假設:) –
你是完全正確的。我應該仔細閱讀。 – Marc