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