我想比较两个数组并返回与数组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个条件语句。有办法吗?
答案 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
,直到找到匹配为止。