2012-10-05 2 views
3

수백만 개의 요소 (데이터베이스 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 } 

답변

3

루비는 교차점을 제공합니다.

난 당신이 시도 제안 수 :

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

. reduce 메서드는 배열 유니온에도 작동합니까? –

+1

예. '[[1,2,3,4], [2,4,6,8], [4,5,8]]. reduce {| accum, arr | 누적 | arr}' – Kyle

+2

&를 사용하지 않고 그냥 줄일 수 있습니다 (: &) – megas