2011-10-01 97 views
3

學習Ruby代碼的美妙之處,我想知道在多維數組中是否有簡單/直接的搜索。我有一個包含4個索引的多數組,其中包含各種數字。我要搜索儘管每個折射率匹配的內容agains另一個數組... seudo codezRuby在多維數組中搜索

multi_array = [ [1,3,7], [3,1,4], [1,3,4], [0,9,2]] 
numbers_looking_to_match = [1,5,9] 
multi_array.each do | elmt | 
    elmt.each_with_index do |elmt, idx| 
    if elmt == numbers_looking_to_match.each { |e| puts "match" } 
    end 
end 

我想這與原來的多陣列刪除所有非匹配的字符,返回一個新的多陣列。

+0

你試圖從multi_array中的每一個元素中刪除號碼?或者如果multi_array的元素不包含numbers_looking_to_match的完全匹配,則拋出它的元素?另外,你是否關心每個元素中的數字順序? –

+0

我想要做的是刪除號碼不匹配number_looking_to_match ...所以,如果我們看看多陣列和numbers_looking_to_match數組函數的返回應該*提供給我一個結果== [[1],[1 ],[1],[9]但不限於一個結果。 – Somethingconcon

回答

6

使用Array#&交叉口,

multi_array.map {|a| a & numbers_looking_to_match } 
+0

如果數組有混合類型,該怎麼辦?數組中的第一個元素是Fixnum,其餘的是數組或字符串 – Gcap

1

multi_array.each { |elem| numbers_looking_to_match.each { |x| elem.delete(x) if elem.include?(x)}}

1

要清理的不想要的字符每個元素:

require 'set' 
multi_array=[ [1,3,7], [3,1,4], [1,3,4], [0,9,2]] 
numbers_looking_to_match=Set.new([1,5,9]) 

scrubbed=multi_array.collect{ |el| 
    numbers_looking_to_match.intersection(el).to_a 
} 

puts scrubbed.inspect 
# prints [[1], [1], [1], [9]]