我想比较两个数组,并返回数组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
,直到找到匹配。