В Ruby существует ли разница между функциональными возможностями each
, map
и collect
?В чем разница между картой, каждой и коллекцией?
55
A
ответ
107
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!
, определенный по Array
s; они изменяют приемник на месте:
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]"
21
Each
оценит блок, но отбрасывает результат оценки 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]
карта является сообществом выбрана версия https://github.com/bbatsov/ruby-style-guide#map-fine-select-reduce-size –