我有以下数组:items = [[573, 574], [573, 574], [573], [573, 574]]
如何找到每个阵列上发生的元素?从这个数组我只想得到" 573" 有人可以帮帮我吗?
答案 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?}