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

时间:2015-05-27 21:53:15

标签: arrays ruby find

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

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

我想使用数组而不是将其分成3个条件语句。有办法吗?

3 个答案:

答案 0 :(得分:1)

只需这样做

 array_1.find { |x| array_2.include?(x) }

答案 1 :(得分:1)

array_1 = [ 'green', 'yellow' ]
array_2 = ["red", "yellow", "blue"]
( array_1 & array_2 ).first

答案 2 :(得分:1)

如果效果很重要,请先将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_2的每个元素枚举array_1,直到找到匹配为止。