2013-08-21 59 views
1

所以我想從rubeque http://www.rubeque.com/problems/related-keys-of-hash/來解決這個問題。基本上,我只需要得到一個哈希值,其值等於給定的參數。我想知道你們是否可以給我一些提示?要解決這個問題,非常感謝你如何獲取其值等於ruby中給定參數的哈希鍵?

這是我迄今爲止

class Hash 
    def keys_of(*args) 
      key = Array.new 
    args.each { |x| key << x} 
    key.each { |x,y| x if y == key} 
    end 
end 



assert_equal [:a], {a: 1, b: 2, c: 3}.keys_of(1) 
    assert_equal [:a, :d], {a: 1, b: 2, c: 3, d: 1}.keys_of(1) 
    assert_equal [:a, :b, :d], {a: 1, b: 2, c: 3, d: 1}.keys_of(1, 2) 

回答

5

使用Hash#select

{a: 1, b: 2, c: 3, d: 1}.select { |key, value| value == 1 } 
# => {:a=>1, :d=>1} 
{a: 1, b: 2, c: 3, d: 1}.select { |key, value| value == 1 }.keys 
# => [:a, :d] 

{a: 1, b: 2, c: 3, d: 1}.select { |key, value| [1,2].include? value }.keys 
#=> [:a, :b, :d] 

class Hash 
    def keys_of(*args) 
    select { |key, value| args.include? value }.keys 
    end 
end 
+0

尼斯(Y)我喜歡這個 – David

+2

使用'args.include?(value)'做出最後一個測試通過 – Satya

+0

@Satya,謝謝,我錯過了。 – falsetru

0
h = {a: 1, b: 2, c: 3, d: 1} 
p h.each_with_object([]){|(k,v),ar| ar<<k if [1,2].member?(v)} 
# >> [:a, :b, :d] 
相關問題