Ruby ‘шные итераторы — each и collect

мая 5, 2010  |  Published in Ruby, Основы

each & collect Ruby methodsИтераторы являются не чем иным, как методами, поддерживающими коллекции. Коллекциями называются объекты, которые хранят в себе группы элементов данных. В массивы и хэши в Ruby также могут называться коллекциями, поскольку полностью соответствую вышеописанному определению коллекций.
Итераторы – это методы, которые последовательно проходят по всем элементам коллекции (массива или хэша) при этом выполняя над ними определенные операции. В этой статье мы рассмотрим два итератора – это итераторы each и collect. Давайте приступим!

Итератор each:

Итератор each проходит по всем элементам массива или хэша.
Синтаксис:

collection.each do |variable|
code
end

each выполняет код для каждого элемента в коллекции. Коллекцией, как уже говорилось, имеет право быть как массив, так и хэш.

Пример:

ary = [1,2,3,4,5]
ary.each do |i|
puts i
end

Данная программа вернет следующий результат:

1
2
3
4
5

Итератор each всегда объединяется с блоком. Он возвращает каждый элемент массива, один за другим в блок. В данном примере значение сохраняется в переменной i и затем выводятся на экран.

Итератор collect:

Итератор collect возвращает все элементы коллекции.

Пример:


collection = collection.collect

Метод collect не всегда нуждается в объединении с блоком. collect возвращает всю коллекцию, независимо от того, является она массивом или хэшем.

Пример:

a = [1,2,3,4,5]
b = Array.new
b = a.collect
puts b

После исполнения это программа вернет следующий результат:

1
2
3
4
5

Как вы видите, с помощью итератора collect мы создали копию массива a.

ПРИМЕЧАНИЕ: Метод collect не самый удачный способ создавать копии массивов. Это реализовывается другим методом – методом clone, который следует использовать для копирования одного массива в другой.

Обычно итератор collect используется когда необходимо сделать что-то с каждым элементом коллекции и результат поместить в новый массив. Пример ниже позволяет в массив b поместить каждое значение массива a умноженное на 10.

a = [1,2,3,4,5]
b = a.collect{|x| 10*x}
puts b

Результатом выполнения этой программы будет:

10
20
30
40
50

При этом массив a остался прежним и не претерпел каких-либо изменений.

Оригинал переведенной статьи здесь:

С другими итераторами мы   познакомимся в следующих статьях. Удачи!

Tags: ,

Leave a Response

Для подсветки кода используйте BB - коды: [language]...[/language], где language может быть: ruby, javascript, css, html.