2012-03-20 40 views
34

Làm cách nào tôi có thể lặp lại tối đa bốn đối tượng của một mảng chứ không phải tất cả? Trong đoạn mã sau, nó lặp lại trên tất cả các đối tượng. Tôi chỉ cần bốn vật thể đầu tiên.Lặp lại trên các phần tử n đầu tiên của một mảng

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

Có thể thực hiện như objects=objects.slice(4) hoặc lặp lại cách duy nhất không?

Edit:

Tôi cũng cần phải in bao nhiêu lần lặp xảy ra, nhưng giải pháp của tôi objects[0..3] (nhờ câu trả lời ở đây) dài.

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

Bạn chỉ cần cố gắng để lấy bốn đối tượng đầu tiên, hoặc bạn đang cố gắng để lặp qua bốn đối tượng đầu tiên ? Bạn có thể sử dụng phương thức 'take' để lấy các đối tượng n đầu tiên nếu bạn chỉ muốn lặp qua chúng:' objects.take (4) .each do ... ' –

+1

Tại sao không' arr = Products.limit (4). to_a' (nhưng có lẽ bạn thậm chí không cần 'to_a')? Bất cứ khi nào bạn thấy mình nói 'Model.all' bạn nên suy nghĩ lại (và sau đó là lần thứ ba). –

+1

@Yosef bạn muốn [each_with_index] (http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-each_with_index) ... cũng, '++' không phải là ruby operator – Kyle

Trả lời

37

Tôi đoán cách rubyst sẽ đi bởi

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

p arr; 

để với [0..3] bạn tạo một mảng con chỉ chứa 4 nguyên tố đầu tiên từ các đối tượng.

+1

Tại sao lặp lại khi chỉ 'arr = objects [0..3]' thực hiện điều tương tự? –

+0

xin vui lòng xem chỉnh sửa của tôi – Yosef

2

Bạn có thể ghép các mảng như thế này objects[0,4]

objects[0,4] đang nói: bắt đầu từ chỉ số 0 và đưa cho tôi 4 yếu tố của mảng.

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

p arr 
+1

Tại sao 'inject' khi chỉ' arr = objects [0,4] 'sẽ làm gì? –

+0

Tôi giả định OP muốn lặp qua một mảng và thực hiện điều gì khác ngoài việc thu thập các phần tử. – Kyle

4
arr = objects[0..3] 

Thats all. Bạn không cần phần còn lại

Các vấn đề liên quan