Rubyのmap、each、collect、map!、collect!秘密を暴く
2431 ワード
def map_method
arr1 = ["name2","class2"]
arr2 = arr1.map {|num| num + "and"}
print "map............",arr2,"
"
end
def each_method
arr1 = ["name2","class2"]
arr2 = arr1.each {|num| num + "and"}
print "each............",arr2,"
"
end
def collect_method
arr1 = ["name2","class2"]
arr2 = arr1.collect {|num| num + "and"}
print "collect............",arr2,"
"
end
def map1_method
arr1 = ["name2","class2"]
arr2 = arr1.map! {|num| num + "and"}
print "map!............",arr2,"
"
end
def collect1_method
arr1 = ["name2","class2"]
arr2 = arr1.collect! {|num| num + "and"}
print "collect!............",arr2,"
"
end
def test
map_method
each_method
collect_method
map1_method
collect1_method
end
test
result:
map............["name2and", "class2and"]
each............["name2", "class2"]
collect............["name2and", "class2and"]
map!............["name2and", "class2and"]
collect!............["name2and", "class2and"]
eachの使い方をより明確に理解するために、次の例を見てみましょう.
def each_deep_method
arr_test = [1,2,3]
arr_result = arr_test.each do |num|
num = num + 1
p num
end
arr_result
end
result:
2
3
4
=> [1, 2, 3]
表示each_deep_methodの戻り値arr_resultはarr_testは等しい.
[まとめ]
(1)eachは配列の各要素を遍歴するだけで、新しい配列を生成しない.
(2)mapとcollectは同じ使い方で、各要素を遍歴し、処理後の要素で新しい配列を構成し、新しい配列を返す.
(3)map!同じcollect!
そのうちmapとmap!、collectとcollect!の違いは葛藤しなくてもいいでしょう.本当に葛藤しているのは次の例を見てみましょう.
def map_deep_method
arr_test = [1,2,3]
arr_test.map do |num|
num += 1
end
arr_test #[1, 2, 3]
end
def map1_deep_method
arr_test = [1,2,3]
arr_test.map! do |num|
num += 2
end
arr_test #[3, 4, 5]
end