2012-02-24 10 views

Odpowiedz

107

each różni się od map i collect, ale map i collect są takie same (technicznie map jest aliasem dla collect, ale z mojego doświadczenia map służy dużo częściej).

each pełni zamknięty blok dla każdego elementu (Enumerable) odbiornika:

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

map i collect wytwarzania nowego Array zawierające wyniki bloku stosowanej do każdego elementu odbierającego:

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

Istnieje również map!/collect! zdefiniowany na Array s; oni modyfikować odbiornik w miejscu:

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]" 
+2

mapa jest wybieraną przez społeczność wersją https://github.com/bbatsov/ruby-style-guide#map-fine-select-reduce-size –

21

Each oceni blok ale wyrzuca wynik oceny Each bloku i przywraca oryginalną tablicę.

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

Map/collect powrotu szereg skonstruowany w wyniku wywoływania blok dla każdej pozycji w tablicy.

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