Kotlin - リスト
公開日:2019-11-06 更新日:2019-11-06
[Kotlin]
1. 概要
リストの使い方についてです。
リストは複数の値を保持することができます。
リストは複数の値を保持することができます。
2. リストの生成
リストを生成するには、listOf() または mutableListOf() を使用します。
listOf() は読み込み専用です。
mutableListOf() は要素の追加、変更、削除などを行うことができます。
listOf() は読み込み専用です。
mutableListOf() は要素の追加、変更、削除などを行うことができます。
var lst1 = listOf("a", "b", "c", "d", "e") // 要素の変更不可
var lst2 = mutableListOf("a", "b", "c", "d", "e") // 要素の変更可
var lst3 = mutableListOf<Int>(1, 2, 3) // 数値のみ設定可
3. 要素の取得
var lst = listOf("a", "b", "c", "d")
//インデックスを指定して要素の取得
println(lst[0]) // a
println(lst.get(1)) // b (非推奨)
4. 要素の設定
var lst = mutableListOf("a", "b", "c", "d")
//インデックスを指定して要素の取得
lst[0] = "A"
lst[1] = "B"
println(lst) // [A, B, c, d]
5. 要素の追加
var lst = mutableListOf("b", "c", "d")
lst.add(0, "a") // 先頭に追加
lst.add("e") // 末尾に追加
println(lst) // [a, b, c, d, e]
6. 要素の削除
var lst = mutableListOf("a", "b", "c", "d", "e")
// 先頭から 2つの要素の削除
var lst2 = lst.drop(2)
println(lst2) // [c, d, e]
// 末尾から 1つの要素の削除
var lst3 = lst.dropLast(2)
println(lst3) // [a, b, c]
7. 要素でループ
var lst = listOf("a", "b", "c")
lst.forEach{
print(it)
}
//結果: abc
8. ソート
var lst = listOf("c", "a", "d", "b", "e")
lst = lst.sorted()
println(lst) // [a, b, c, d, e]
9. 重複の除去
var lst = listOf("a", "a", "b", "c", "c")
lst = lst.distinct()
println(lst) // [a, b, c]
10. 絞り込み
filter を使うと、ラムダ式による要素の絞り込みが行えます。
var lst = listOf("width", "height", "margin-left", "margin-right")
var lst2 = lst.filter { s -> s.startsWith("margin") }
println(lst2) // [margin-left, margin-right]
11. 要素数の取得
要素数は size で取得して、条件に一致する要素数を取得したい時は count() を使います。
var lst = listOf("width", "height", "margin-left", "margin-right")
println(lst.size) // 4
println(lst.count{
it.startsWith("margin")
}) // 2
12. 型の指定
ジェネリクスで型を指定して、要素の型を制限することができます。
以下のリストの要素は、 String に限定されます。
また、ジェネリクスで指定しない場合でも、リストの値から自動的に型が決定するため注意が必要です。
以下の場合は、型推論により String と判定されるため、数値を設定するとコンパイルエラーになります。
<Any> を付けるか、要素に数値を入れて、型推論で Any にする必要があります。
以下の場合は数値で統一されていますが、Int と Double で型が異なるため、Any として扱われます。
その結果、String の値も設定できるようになるため要注意です。
ジェネリクスを付けられるものは、なるべく付けた方が良いかもしれません。
以下のリストの要素は、 String に限定されます。
var lst = mutableListOf<String>("a", "b", "c")
また、ジェネリクスで指定しない場合でも、リストの値から自動的に型が決定するため注意が必要です。
以下の場合は、型推論により String と判定されるため、数値を設定するとコンパイルエラーになります。
<Any> を付けるか、要素に数値を入れて、型推論で Any にする必要があります。
var lst = mutableListOf("a", "b", "c")
lst.add(123) //エラー
以下の場合は数値で統一されていますが、Int と Double で型が異なるため、Any として扱われます。
その結果、String の値も設定できるようになるため要注意です。
ジェネリクスを付けられるものは、なるべく付けた方が良いかもしれません。
var lst = mutableListOf(1, 0.5)
lst.add("test")
println(lst) // [1, 0.5, test]