我需要将 n 数组与数百万个元素(数据库 ID)相交。这段代码完美无缺,但速度很慢(数组很大)。我该如何改进它?
[[1,2,3,4],[2,4,6,8],[4,5,8]].inject([]){|c,v| c = v if c.size==0; c = c&v if c.size>0; c }
[1,2,3,4] & [2,4,6,8] & [4,5,8] #=> [4]
交集方法使用哈希,所以它应该很快。
Ruby 提供了一个交集运算符。
我可以建议你试试这个:
> [[1,2,3,4],[2,4,6,8],[4,5,8]].reduce{ |accum, arr| accum & arr }
=> [4]
编辑:
这可以写得更简洁一些,但它会受到可读性的影响。
[[1,2,3,4],[2,4,6,8],[4,5,8]].reduce(:&)