2010-07-07 5 views
56

여러 배열 사이의 교차 값을 찾으려고합니다. 예를레일 - 여러 배열 간의 교차점 찾기

code1 = [1,2,3] 
code2 = [2,3,4] 
code3 = [0,2,6] 

에 대한

그래서 결과는 내가 PHP 알고있는 2

당신은 내가 쉽게 내가 돈 때문에 추가적인 배열을 추가 할 수 있기를 원는 array_intersect

이 할 수있는 것 정말 여러 루프를 사용하고 싶지 않다

아이디어가 있으십니까?

감사합니다, 알렉스

답변

89

사용 교집합입니다 Array& 방법. 예를 들어

:

> [1,2,3] & [2,3,4] & [0,2,6] 
=> [2] 
+0

@Anurag이 기능이 제대로 작동합니까? OP의 요구 사항을 오해하지 않는 한 첫 번째 및 마지막 배열은 교차로에 대해 서로 테스트하지 않습니다. 예 :'[1,2,3] & [4,5,6] & [1,2,3]는 빈 배열을 반환합니다. – Noz

+0

@Cyle 3 방향 교차 결과의 모든 요소가 세 피연산자 모두에 있어야합니다. http://en.wikipedia.org/wiki/Intersection_(set_theory) – bdares

34

당신이 간단한 방법을 알 길이의 배열의 배열이 작업을 수행하려면, 당신은 분사를 사용할 수 있습니다.

> arrays = [code1,code2,code3] 
> arrays.inject(:&)     # Ruby 1.9 shorthand 
=> [2] 
> arrays.inject{|codes,x| codes & x } # Full syntax works with 1.8 and 1.9 
=> [2] 
+0

'arrays.inject (: &)'는 1.9에서 작동하지 않습니다. 'arrays.inject (: '&')' –

+0

array.inject (: &)'1.9 (1.9.3p429)에서 작동합니다. – Florent2