Итерация по первым n элементам массива - PullRequest
46 голосов
/ 20 марта 2012

Как я могу перебрать до четырех объектов массива и не все?В следующем коде он перебирает все объекты.Мне нужны только первые четыре объекта.

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

Можно ли это сделать как objects=objects.slice(4), или это итерация только так?

Редактировать:

Мне также нужнонапечатать, сколько раз повторяется итерация, но мое решение objects[0..3] (благодаря ответам здесь) долго.

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

Ответы [ 5 ]

84 голосов
/ 11 апреля 2013

Вы можете получить первые n элементов, используя

arr = objects.first(n)

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

46 голосов
/ 20 марта 2012

Полагаю, что рубиновый путь прошел бы

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

p arr;

, так что с помощью [0..3] вы создаете подмассив, содержащий только первые 4 элемента из объектов.

19 голосов
/ 20 марта 2012

Enumerable#take возвращает первые n элементы из Enumerable.

4 голосов
/ 12 сентября 2012
arr = objects[0..3]

Вот и все.Вам не нужен отдых

2 голосов
/ 20 марта 2012

Вы можете склеить массив следующим образом objects[0,4]

objects[0,4] говорит: начните с индекса 0 и дайте мне 4 элемента массива.

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

p arr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...