Map / Collect
一般來說,會把這兩個視為同一種功能,也有說法是map 是collect 的別名
stackoverflow 有針對 map 和 collect 做 benchmark,使用 map 效能會比較好
map 和 collect 是屬於 Enumerable Module 的 methods
map 和 collect 會回傳新的 array,而 array 內的值是 block 執行的結果
Array、Hash 都有include enumerable module,就可以使用map 和 collect
1 2 3 4 5 6 7 8 | |
& 是 #to_proc 簡化的符號
在Rails 中,假設要取得所有User 的姓名,使用 map 的寫法如下
1 2 | |
承上,簡化 user[:name],可以使用& 執行 #to_proc,就變成&:name
stackoverflow 有更詳細的說明
1 2 | |
使用 String#upcase
1 2 3 4 5 6 | |
跟 each 差別在哪呢?
看完 map, collect 感覺跟一般常用的 each 很像,那他們的差別在哪邊呢?
首先 Array、Hash 都有各自實作 #each
執行的方式,跟執行 block 的動作是一樣的
主要差別在 each 是回傳self (Array、Hash),而map 和 collect 回傳 new array