返回与不同数组中的元素匹配的数组的第一个值



我想比较两个数组,并返回数组1中与数组2中的项匹配的第一个值。以下是目前为止的内容:

def find_the_color(array_1)
  array_2 = ["red", "yellow", "blue"]
  sample.find do |x|
    x=="red"||x=="yellow"||x=="blue"
  end
end

我想用数组来做这个,而不是把它分成3个条件语句。有办法吗?

就这样做

 array_1.find { |x| array_2.include?(x) }
array_1 = [ 'green', 'yellow' ]
array_2 = ["red", "yellow", "blue"]
( array_1 & array_2 ).first

如果性能很重要,首先将array_2转换为Set:

array_1 = %w{ green yellow orange purple mauve black blue }
array_2 = %w{ pink red mauve white brown }
require 'set'
set_2 = array_2.to_set
array_1.find { |e| set_2.include? e }
  #=> "mauve"

通过在开始时将array_2转换为一个集合,set_2.include? e可以快速执行(类似于查找散列键的值)。相比之下,使用array# include?,必须为array_1的每个元素枚举array_2,直到找到匹配。

相关内容

最新更新