测试数组是否包含第二个数组中的任何元素的最有效方法是什么?
下面的两个示例,试图回答这个问题确实foods包含来自 的任何元素cheeses:
foods
cheeses
cheeses = %w(chedder stilton brie mozzarella feta haloumi reblochon) foods = %w(pizza feta foods bread biscuits yoghurt bacon) puts cheeses.collect{|c| foods.include?(c)}.include?(true) puts (cheeses - foods).size < cheeses.size
(cheeses & foods).empty?
正如 Marc-André Lafortune 在评论中所说,&在线性时间内工作,而any?+include?将是二次的。对于较大的数据集,线性时间会更快。对于小型数据集,any?+include?可能会更快,如 Lee Jarvis 的回答所示——可能是因为&分配了一个新的 Array 而另一个解决方案没有,并且作为一个简单的嵌套循环返回一个布尔值。
&
any?
include?