Ruby搜索多维数组

3

学习优美的Ruby代码,我想知道是否有一种简单/直接的方法可以在多维数组中进行搜索。我有一个包含各种数字的4个索引的多维数组。我想搜索每个索引,将内容与另一个数组进行匹配... 伪代码如下:


学习 Ruby 代码的魅力,我在思考是否有一种简单 / 直接的方式可以在多维数组中进行搜索。我有一个有四个索引的多维数组,其中包含各种数字。我想对每个索引进行搜索,并将其内容与另一个数组匹配... 伪代码如下:
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

我希望这个函数可以返回一个新的多维数组,其中所有不匹配的字符都被从原始的多维数组中删除。

你是想从multi_array的每个元素中删除数字吗?还是如果multi_array的某个元素不包含numbers_looking_to_match的精确匹配,则将其丢弃?此外,您是否关心每个元素中数字的顺序? - Josh Diehl
我想要做的是删除与number_looking_to_match不匹配的数字...因此,如果我们查看多维数组和numbers_looking_to_match数组,函数的返回值应该为我提供一个结果==[[1],[1],[1],[9],但不限于一个结果。 - Somethingconcon
3个回答

6

使用Array#&进行交集操作:

multi_array.map {|a| a & numbers_looking_to_match }

如果数组有混合类型怎么办?我的数组中的第一个元素是Fixnum,其余的是Arrays或Strings。 - Gcap

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]]

1

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接