11

저는 Ruby on Rails 3.2.2와 Ruby 1.9.2를 사용하고 있습니다.스마트 한 방식으로 다차원 배열에서 값을 "추출"하려면 어떻게해야합니까?

주어진 다음의 Array 다차원 :

[["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 

내가 좀하고 싶습니다 (참고 : 나는 모든 "중첩"Array의의 첫 번째 값 "추출"하고 싶은) :

["value1", "value2", "value3"] 

어떻게 스마트하게 만들 수 있습니까?

+1

가능 중복 [I 내지 Sn \ [배열을 선택하는 방법을 n 개의 서브 어레이의 Sn의 어레이 A, I 주어 루비 \] 부재? (http://stackoverflow.com/questions/11120244/주어진 배열의 n-subarrays-sn-how-can-select-the-sni-members) –

+0

@ KL-7 - 당신은 맞지만, 새 질문을 올리기 전에 연결된 질문을 찾지 못했습니다. – user12882

답변

23

Array#collect을 사용하여 외부 배열의 각 요소에 대해 블록을 실행할 수 있습니다. 첫 번째 요소를 가져 오려면 배열을 인덱싱하는 블록을 전달하십시오.

 
arr = [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 
=> [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 
arr.collect {|ind| ind[0]} 
=> ["value1", "value2", "value3"] 

대신 {|ind| ind[0]}, 당신은 먼저 각 내부 배열의 요소를 얻을 Array#first을 사용할 수 있습니다 : 사용

arr.collect {|ind| ind[0]} 

&:first 구문을 보려면

arr.collect(&:first) 

를 읽고 "Ruby/Ruby on Rails ampersand colon shortcut".

2
>> array = [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 
=> [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 
>> array.map { |v| v[0] } 
=> ["value1", "value2", "value3"] 
+0

설명을 위해,'arr.map'과'arr.collect' 사이에는 차이점이 없습니다. http://stackoverflow.com/questions/5254732/difference-between-map-and-collect-in-ruby를 참조하십시오. – forforf

1
arr = [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 

Solution1 = arr.map {|elem| elem.first} 

Solution2 = arr.transpose[0] 
관련 문제