ruby数组交集性能问题

时间:2012-10-05 13:22:09

标签: ruby arrays

我需要与数百万个元素(数据库ID)建立n个数组的交集。 这段代码工作得很完美,但很慢(有很大的数组)。我怎样才能改善它?

[[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 }

2 个答案:

答案 0 :(得分:5)

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

intersection method使用哈希值,因此它应该很快。

答案 1 :(得分:3)

Ruby提供了一个交集opperator。

我建议你试试这个:

> [[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(:&)