我需要使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 }发布于 2012-10-05 21:25:32
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-05 21:26:10
[1,2,3,4] & [2,4,6,8] & [4,5,8] #=> [4]intersection method使用散列,所以它应该很快。
https://stackoverflow.com/questions/12747191
复制相似问题