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 }
수백만 개의 요소 (데이터베이스 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 }
루비는 교차점을 제공합니다.
난 당신이 시도 제안 수 :
> [[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] #=> [4]
intersection method 해시를 사용합니다.
. reduce 메서드는 배열 유니온에도 작동합니까? –
예. '[[1,2,3,4], [2,4,6,8], [4,5,8]]. reduce {| accum, arr | 누적 | arr}' – Kyle
&를 사용하지 않고 그냥 줄일 수 있습니다 (: &) – megas