each
po prostu iteruje po danym przeliczalnym, uruchamiając blok dla każdej wartości. To odrzuca wartości zwracanej bloku, i każdy po prostu zwraca oryginalny obiekt był nazywany na:
[1, 2, 3].each do |i|
i + 1
end # => [1, 2, 3]
To jest po prostu ładniejszy, bardziej uniwersalny sposób robienia tradycyjnych Iteracja for
pętlę i each
jest znacznie preferowane ponad for
pętli w Ruby (w rzeczywistości, nie sądzę, że kiedykolwiek użyłem pętli for
w Ruby).
map
jednak iteracje nad każdym elementem, przy użyciu wartości zwracanej bloku zapełnić nową tablicę na każdym odpowiednim indeksie i powrotu tej nowej tablicy:
[1, 2, 3].map do |i|
i + 1
end # => [2, 3, 4]
więc „mapy” każdy element do nowy za pomocą podanego bloku, stąd nazwa "mapa". Zauważ, że ani each
, ani map
same nie modyfikują oryginalnej kolekcji.
... a oprócz odpowiedzi Andrew i Bryana dodam, że istnieje inna metoda o nazwie * collect *, która jest dokładnie taka sama z * map *;) –
Yup, 'map' i' collect' są równoważne. Chociaż nigdy nie lubiłem nazwy "zbieram", ponieważ nie sądzę, że naprawdę opisuje to, co robi bardzo dobrze. –