在Rails中查找每个数组中出现的元素

时间:2017-09-23 20:16:49

标签: arrays ruby

我有以下数组:items = [[573, 574], [573, 574], [573], [573, 574]]

如何找到每个阵列上发生的元素?从这个数组我只想得到" 573" 有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:3)

您可以在items中找到最小的子数组(以限制搜索集),然后选择items中所有其他数组中出现的该数组中的所有元素:

items.min_by(&:length).select do |element|
  items.all? { |sub_array| sub_array.include?(element) }
end
# => [573]

如果保证只有一个元素在其中,则可以使用detect代替select

答案 1 :(得分:3)

def appears_in_all(arr)
  arr.reduce(:&)
end

appears_in_all [[573, 574], [573, 574], [573], [573, 574]]           #=> [573]
appears_in_all [[573, 574], [573, 574], [573, 574, 578], [573, 574]] #=> [573, 574]
appears_in_all [[573, 574], [573, 574], [573], [573, 574], [2, 4]]   #=> []

答案 2 :(得分:1)

items.flatten.uniq.select{|x| items.map{|y| y.include? x}.all?}