2017-11-25 13 views
1

모든 중첩 배열의 공통 요소를 찾는 루비 함수를 작성하려고합니다. 예를 들어, 다음과 같은 배열 주어,이은과 ...ruby ​​모든 중첩 배열에있는 값 배열

[[1, 2, 3], [1, 2], [2]] 
=> [2] 

[[1, 2, 3], [1, 2, 4]] 
=> [1, 2] 

내가 할 수있는 올 것이라고 대답,

arr = [[1, 2, 3], [1, 2], [2]] 
arr[0] & arr[1] & arr[2] 
=> [2] 

하지만 그 동작을 동적으로 만들 방법을 잘하지 않습니다.

답변

4

Enumerable#reduce (일명 #inject) 방법을 찾고 있습니다. 이것은 배열 같은 열거 형에 대한 집계 계산을 수행합니다. 초기 값을 전달하지 않으면 콜렉션의 첫 번째 요소를 초기 값으로 사용합니다.

arr.reduce { |a, b| a & b } # => [2] 

그리고 표현의 이러한 유형의 편리한 속기있다 :

[[1, 2, 3], [1, 2], [2]].reduce(:&) # => [2] 
[[1, 2, 3], [1, 2, 4]].reduce(:&) # => [1, 2] 
[[1], [2]].reduce(:&)    # => [] 
[].reduce(:&)      # => nil