mapメソッド
CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 60/78。
高階関数とは、別の関数を引数として受け取る関数です。配列にはそのような関数がいくつかあり、map()はその最初のものです。
map()は配列の各要素に関数を適用し、結果を同じ順序で格納した新しい配列を返します。
func square(n):
return n * nvar numbers = [1, 2, 3, 4, 5]
var squares = numbers.map(square)
print(squares)[1, 4, 9, 16, 25]関数は括弧を付けずに名前で渡します。map(square)は関数を渡しますが、map(square())はその場で関数を呼び出そうとします。次にmap()は各要素に対して関数を1回ずつ呼び出します。1は1に、2は4に、3は9になり、その後も同様です。
短い計算なら、ラムダを使うことで関数を別に定義する必要がありません:
var squares = numbers.map(func(n): return n * n)新しい配列は元の配列と同じサイズで、numbers自体は変化しません。結果は要素とは異なる型になることがあります。
var words = ["apple", "kiwi", "banana"]
print(words.map(func(w): return w.length()))[5, 4, 6]map() は、Array[int] のような型付き配列に対して呼び出した場合でも、通常の Array を返します。その結果を Array[int] 型の変数に格納すると、プログラムはエラーで停止するため、型指定のない変数または Array に格納してください。
split() は map() を持たない PackedStringArray を返します。まず Array に変換します。Array("1,2,3".split(",")).map(func(s): return int(s)) は [1, 2, 3] を返します。
チャレンジ
簡単文字列の配列 strings を受け取り、すべての文字列を大文字にした新しい配列を返す、convert_to_uppercase という名前の関数を書いてください。
ループを使わず、ラムダと map() を使ってください。たとえば、convert_to_uppercase(["hello", "world"]) は ["HELLO", "WORLD"] を返します。
テストでは convert_to_uppercase() を呼び出します。自分では呼び出さず、何も出力しないでください。
自分で試してみよう
func convert_to_uppercase(strings: Array[String]):
# ここにコードを書いてください
pass
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ