2012-03-20 3 views
34

배열의 객체를 모두 최대 4 개까지 반복 할 수 있습니까? 다음 코드에서는 모든 객체를 반복합니다. 처음 네 개의 객체 만 필요합니다.배열의 첫 번째 n 요소를 반복하십시오.

objects = Products.all(); 
arr=Array.new 
objects.each do |obj| 
    arr << obj 
end 
p arr 

그것이 objects=objects.slice(4) 같은 일, 또는 유일한 방법은 반복이다 할 수 있습니까?

편집 : 긴

나는 또한 반복이 발생하는 횟수를 인쇄해야

하지만 내 솔루션 objects[0..3] (답변 덕분에 여기). 인덱스 0에서 시작하여 나에게 배열의 4 개 요소를 제공합니다 :

i=0; 
arr=Array.new 
objects[0..3].each do |obj| 
    arr << obj 
    p i; 
    i++; 
end 
+2

방금 ​​처음 네 개의 객체를 잡아하려고, 또는 당신이 처음 네 개의 객체를 반복하려고 사용하여 처음 n 요소를 얻을 수 있습니다 필요 없어요 ? 'take' 메소드를 사용하여 처음 n 개의 객체를 반복 할 수 있습니다 :'objects.take (4) .each do ...' –

+1

왜'arr = Products.limit (4)가 아닌가? to_a' (하지만 당신은 아마도 to_a가 필요하지 않을 것입니다)? 'Model.all'이라고 말하는 순간 언제든지 다시 생각해 야합니다 (그리고 세 번째로). –

+1

@Yosef 원하는 [each_with_index] (http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-each_with_index) ... 또한 '++'는 루비 연산자 – Kyle

답변

37

은 내가 rubyst의 방법으로 그렇게

arr=Array.new 
objects[0..3].each do |obj| 
    arr << obj 
end 

p arr; 

이로 갈 것이라고 추측 [0..3] 당신이 개체에서 불과 처음 4 개 요소를 포함하는 부분 배열을 만들 수 있습니다.

+1

왜'arr = objects [0..3]'이 똑같은 일을 반복할까요? –

+0

내 편집을 참조하십시오 – Yosef

2

objects[0,4]

objects[0,4] 같은 배열이 말하는 스플 라이스 수 있습니다.

arr = objects[0,4].inject([]) do |array, obj| 
    array << obj 
end 

p arr 
+1

'arr = objects [0,4]'가 ​​할 때'inject'하는 이유는 무엇입니까? –

+0

나는 OP가 배열을 반복하고 요소를 수집하는 것 이외의 다른 작업을 수행하기를 원했습니다. – Kyle

16

Enumerable#take은 첫 번째로 n 개 요소를 열거 형에서 반환합니다.

4
arr = objects[0..3] 

그 모두. 당신은 나머지

관련 문제