2011-07-26 5 views
2

배열의 배열 "a"를 렌더링하는 다음과 같은 루프가 있습니다.Ruby - 루프를 통해 위치별로 그룹화 된 배열을 만듭니다.

[[0, 2], [1, 1], [2, 1], [3, 2], [4, 1], [5, 1], [6, 3]] 

내가 만들려고하는 루프 할 수있는 그룹 배열은 각 배열은 인덱스 (이미지의 위치)와 image_id 여기

<% a = [] %> 
<% @portfolio_entry.images.each_with_index do |image, index| %> 
    <% a << [index, image.id] %> 
<% end %> 
<%= a %> 

에 의해 정의되는 것은 출력의 예 처음 세 이미지의 위치, 다음 내 영어로 "최종"배열의 다음 3 등 (소위 그래서 달성하기 위해 :)

Finalarray => [array1, array2, array3] 

array1 => [[0, 2], [1, 1], [2, 1]]  # position 0,1,2 
array2 => [[3, 2], [4, 1], [5, 1]]  # position 3,4,5 
array3 => [[6, 3]]      # position 6 

내가 그림을 시도하려는 예를 참조하십시오이다 내가 어떻게 할 수 있는지 알아봐. (수집?)하지만 구체적인 결과가 없습니다.

아무쪼록 감사드립니다.

답변

4
a = [[0, 2], [1, 1], [2, 1], [3, 2], [4, 1], [5, 1], [6, 3]] 
array1, array2, array3 = a.each_slice(3).to_a 
array1 # => [[0, 2], [1, 1], [2, 1]] 
array2 # => [[3, 2], [4, 1], [5, 1]] 
array3 # => [[6, 3]] 

편집 : 당신이 더 많은 배열을 필요로하는 경우는 to_a 전화로 떠나 블록의 조각을 처리합니다.

final_array = [] 
a.each_slice(3) do |slice| 
    final_array << slice 
end 
# or 
final_array = a.each_slice(3).inject([]) { |arr, slice| arr << slice } 
관련 문제