我需要对数百万个元素(数据库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 }
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(:&)
[[1,2,3,4],[2,4,6,8],[4,5,8]].reduce{ |accum, arr| accum | arr }
- Kylereduce
替换为inject
,它们的功能是相同的,因为它们是彼此的别名。 - Kyle