В чем разница между map, each и collect? [дубликат]


этот вопрос уже есть ответ здесь:

в Ruby, есть ли разница между функциональными возможностями each,map и collect?

2 58

2 ответа:

each отличается от map и collect, а map и collect то же самое (технически map псевдоним collect, но по моему опыту map используется гораздо чаще).

each выполняет закрытый блок для каждого элемента (Enumerable) получатель:

[1,2,3,4].each {|n| puts n*2}
# Outputs:
# 2
# 4
# 6
# 8

map и collect создать новый Array содержащий результаты блока применяется к каждому элементу приемник:

[1,2,3,4].map {|n| n*2}
# => [2,4,6,8]

там же map!/collect! определен Arrays; они изменяют приемник на месте:

a = [1,2,3,4]
a.map {|n| n*2} # => [2,4,6,8]
puts a.inspect  # prints: "[1,2,3,4]"
a.map! {|n| n+1}
puts a.inspect  # prints: "[2,3,4,5]"

Each будет оценивать блок, но выбрасывает результат блока и возвращает исходный массив.

irb(main):> [1,2,3].each {|x| x*2}
=> [1, 2, 3]

Map/collect возвращает массив, построенный в результате вызова блока для каждого элемента в массиве.

irb(main):> [1,2,3].collect {|x| x*2}
=> [2, 4, 6]