2011-07-08 79 views
5

我有一個哈希使用哈希選擇一個數組

h = {a=> 1, b=> 2, c=> 3} 

和陣列

a = [a, b] 

是否有可能使用

h.select {|k,v| k == array_here?} 

要選擇從陣列中的所有元素存在於散列?

我找到了解決辦法

h.select {|k,v| a.include?(k) } 
+0

您應該添加解決方案作爲答案並接受它 –

+0

您正在詢問_「陣列中存在於散列中的所有元素_」,而是希望_「散列中存在其鍵中的所有元素」_ _ 。這個問題具有誤導性,並導致錯誤的答案。 –

+0

我覺得是一樣的。來自陣列中存在於散列中的所有元素與散列中存在於該數組中的所有元素具有相同的含義! – glarkou

回答

0

一個可能的和最簡單的答案是:

h.select {|k,v| a.include?(k) } 
2

你倒退了。試試這個:

a.select {|e| h.has_key? e } 
+0

這不起作用。正確的是'h.select {| k,v | a.include?(k)}' – glarkou

+2

在這種情況下,您提出了錯誤的問題。 – jtbandes

1

你可以做到這一點的東西,如:

a.each do |arr_elem| 
    new_hash[arr_elem] = h[arr_elem] unless h[arr_elem].nil? 
end 
1

如果你真的想你問什麼(即在散列中呈現爲鍵的數組的元素):

h = {:a => 1, :b => 2, :c => 3} 
a = [:a, :b, :d] 
a & h.keys