3

我需要将 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 }
4

2 回答 2

6
[1,2,3,4] & [2,4,6,8] & [4,5,8] #=> [4]

交集方法使用哈希,所以它应该很快。

于 2012-10-05T13:26:10.123 回答
3

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(:&)
于 2012-10-05T13:25:31.770 回答