リスト
リストは、整数のインデックスで識別する要素の集まりを格納する複合オブジェクトです。コンマで区切った一連の式を角括弧で囲むと、リストを作成できます。
[1, "banana", true]
ここでは、要素が三つのリストを作りました。要素の型をそろえる必要はない点に注意してください。
要素へのアクセス #
目的の要素のインデックスを渡して、リストの添字演算子を呼び出すと、要素にアクセスできます。多くの言語と同様、インデックスはゼロから始まります。
var trees = ["cedar", "birch", "oak", "willow"]
System.print(trees[0]) //> cedar
System.print(trees[1]) //> birch
負のインデックスは、末尾から逆向きに数えます。
System.print(trees[-1]) //> willow
System.print(trees[-2]) //> oak
リストの範囲外のインデックスを渡すと、実行時エラーになります。範囲が分からない場合は、countで調べられます。
System.print(trees.count) //> 4
スライスと範囲 #
リストから、まとまった要素をコピーしたいことがあります。次のように、添字演算子に範囲を渡すと、それができます。
System.print(trees[1..2]) //> [birch, oak]
指定した範囲内のインデックスを持つ元のリストの要素を含んだ、新しいリストが返ります。終点を含む範囲でも、含まない範囲でも、予想どおりに動作します。
単一の数値を渡す場合と同様、範囲の端点にも負の値を使えます。したがって、リストをコピーするには次のように書くだけです。
trees[0..-1]
要素の追加 #
リストは可変で、内容を変更できます。添字セッターを使うと、リスト内の既存の要素を置き換えられます。
trees[1] = "spruce"
System.print(trees[1]) //> spruce
範囲外の要素を設定しようとすると、エラーになります。リストを大きくするには、addで一つの項目を末尾に追加できます。
trees.add("maple")
System.print(trees.count) //> 5
insertを使うと、指定した位置に新しい要素を挿入できます。
trees.insert(2, "hickory")
最初の引数は挿入先のインデックス、二番目の引数は挿入する値です。場所を空けるため、挿入した要素以降のすべての要素を後ろへずらします。
リストの最後の要素の後に「挿入」することもできますが、その直後に限ります。ほかのメソッドと同様、負のインデックスで末尾から数えることもできます。この場合、一つ要素が増えた後のリストの大きさを基準に、後ろから数えます。
var letters = ["a", "b", "c"]
letters.insert(3, "d") // OK: inserts at end.
System.print(letters) //> [a, b, c, d]
letters.insert(-2, "e") // Counts back from size after insert.
System.print(letters) //> [a, b, c, e, d]
リストの連結 #
リスト同士は+演算子で足し合わせられます。この操作は、一般に連結と呼ばれます。
var letters = ["a", "b", "c"]
var other = ["d", "e", "f"]
var combined = letters + other
System.print(combined) //> [a, b, c, d, e, f]
要素の削除 #
insertの反対の操作はremoveAtです。リスト内の指定した位置から、一つの要素を削除します。
代わりに特定の値を削除するには、removeを使います。通常の等価比較で最初に一致する値を削除します。
どちらの場合も、後続のすべての項目を前へずらし、空いた場所を埋めます。
var letters = ["a", "b", "c", "d"]
letters.removeAt(1)
System.print(letters) //> [a, c, d]
letters.remove("a")
System.print(letters) //> [c, d]
removeとremoveAtのメソッドは、どちらも削除した項目を返します。
System.print(letters.removeAt(1)) //> c
removeがリスト内で値を見つけられなかった場合は、nullを返します。
System.print(letters.remove("not found")) //> null
リストからすべてを削除したい場合は、clearで空にできます。
trees.clear()
System.print(trees) //> []
マップ →← 値