2011-07-08 25 views
5

Tôi có một bămSử dụng băm chọn cho một mảng

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

và một mảng

a = [a, b] 

Có thể sử dụng

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

Để chọn tất cả các yếu tố từ mảng đó tồn tại trong băm?

Tôi tìm thấy giải pháp

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

Bạn nên thêm giải pháp của mình làm câu trả lời và chấp nhận nó –

+0

Bạn đang yêu cầu _ "tất cả các phần tử từ mảng tồn tại trong hàm băm" _, nhưng thay vì muốn _ "tất cả các phần tử từ băm có khóa tồn tại trong mảng" _ . Câu hỏi đã gây hiểu nhầm và dẫn đến câu trả lời sai. –

+0

Tôi nghĩ là như nhau. tất cả các phần tử từ mảng tồn tại trong hàm băm có cùng ý nghĩa với tất cả các phần tử từ băm có khóa tồn tại trong mảng! – glarkou

Trả lời

0

Một khả năng và câu trả lời đơn giản nhất là:

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

Bạn đang đi về nó về phía sau. Hãy thử điều này:

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

Tính năng này không hoạt động. Đúng là 'h.select {| k, v | a.include? (k)} ' – glarkou

+2

Trong trường hợp đó bạn đã đặt câu hỏi sai. – jtbandes

1

Bạn có thể đạt được điều đó với một cái gì đó như:

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

Nếu bạn thực sự muốn những gì bạn đã yêu cầu (ví dụ: các phần tử của một mảng hiển thị dưới dạng khóa trong băm):

h = {:a => 1, :b => 2, :c => 3} 
a = [:a, :b, :d] 
a & h.keys 
Các vấn đề liên quan