Ben
Ben

Reputation: 25827

Iterate over the first n elements of an array

How can I iterate up to four objects of an array and not all? In the following code, it iterates over all objects. I need only the first four objects.

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

Can it be done like objects=objects.slice(4), or is iteration the only way?

Edit:

I also need to print how many times the iteration happens, but my solution objects[0..3] (thanks to answers here) long.

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

Upvotes: 76

Views: 80093

Answers (5)

Kate
Kate

Reputation: 1406

You can get first n elements by using

arr = objects.first(n)

http://ruby-doc.org/core-2.0.0/Array.html#method-i-first

Upvotes: 138

Automatico
Automatico

Reputation: 12936

arr = objects[0..3]

Thats all. You dont need the rest

Upvotes: 6

Kyle
Kyle

Reputation: 22278

You can splice the array like this objects[0,4]

objects[0,4] is saying: start at index 0 and give me 4 elements of the array.

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

p arr

Upvotes: 2

Mladen Jablanović
Mladen Jablanović

Reputation: 44110

Enumerable#take returns first n elements from an Enumerable.

Upvotes: 20

Jack
Jack

Reputation: 133669

I guess the rubyst way would go by

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

p arr;

so that with the [0..3] you create a subarray containing just first 4 elements from objects.

Upvotes: 61

Related Questions