2011-07-08 14 views
5

mam hashużycie skrótu wybrać dla tablicy

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

i tablicę

a = [a, b] 

Czy jest możliwe aby użyć

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

Aby zaznaczyć wszystkie elementy z tablicy, która istnieje w haszowaniu?

znalazłem rozwiązanie

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

Powinieneś dodać swoje rozwiązanie jako odpowiedź i zaakceptować je –

+0

Pytasz o _ "wszystkie elementy z tablicy, które istnieją w haśle" _, ale zamiast tego chcą _ "wszystkie elementy z hasha, którego klucze istnieją w tablicy" _ . Pytanie było mylące i wynikało z błędnych odpowiedzi. –

+0

Myślę, że to to samo. wszystkie elementy z tablicy, które istnieją w haśle, mają takie samo znaczenie jak wszystkie elementy z hasha, którego klucze istnieją w tablicy! – glarkou

Odpowiedz

0

Jednym z możliwych i Najprostsza odpowiedź brzmi:

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

Będziesz o nią od tyłu. Spróbuj tego:

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

To nie działa. Poprawne jest 'h.select {| k, v | a.include? (k)} ' – glarkou

+2

W takim przypadku zadałeś złe pytanie. – jtbandes

1

Można to osiągnąć coś podobnego:

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

Jeśli naprawdę chcesz, co masz pytanie (tj elementy tablicy, które występują jako klucze w haśle):

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