Kotlin - セット

公開日:2019-11-06 更新日:2019-11-06
[Kotlin]

1. 概要

セットの使い方についてです。
セットは複数の値を保持することができます。
単純な値の保持はリストを使い、集合による処理を行いたい場合はセットを使用します。
セットはリストと異なり、重複する値を保持できません。


2. セットの生成

var set1 =        setOf("a", "b", "c", "d", "e") // 要素の変更不可
var set2 = mutableSetOf("a", "b", "c", "d", "e") // 要素の変更可
var set3 = mutableSetOf<Int>(1, 2, 3)            // 数値のみ設定可

重複する値は無視されます。
val set1 = mutableSetOf("a", "b", "c", "d", "a", "b")
println(set1) // [a, b, c, d]


3. 要素の有無の取得

セット(集合)に要素が含まれているか取得します。
val set1 = setOf("a", "b", "c")

println(set1.contains("a")) // true
println(set1.contains("A")) // false
println(set1.contains("Z")) // false


4. 要素の取得

リストのように [] でアクセスするとエラーになるので注意してください。
val set1 = setOf("a", "b", "c", "d")

//インデックスを指定して要素の取得
println(set1.elementAt(0)) // a
println(set1.elementAt(1)) // b
//println(set1[0]) // エラー

println(set1.elementAtOrNull(2))   // c
println(set1.elementAtOrNull(999)) // null


5. 要素の設定

既存の値を直接変更することはできません。
変更する場合は、既存の値を削除してから、新しい値を追加してください。


6. 要素の追加

要素を追加するには、add() または plus() を使用します。
add() は元のセットに追加され、plus() は元のセットには追加されずに、追加した新しいセットを返します。

val set1 = mutableSetOf("a", "b", "c")

set1.add("d")
set1.add("d") // 重複するため無視されます
set1.add("d") // 重複するため無視されます
println(set1) // [a, b, c, d]

val set1 = mutableSetOf("a", "b", "c")

val set2 = set1.plus("d")
println(set2) // [a, b, c, d]
println(set1) // [a, b, c]    // 元のセットは影響を受けない


7. 要素の削除

要素を削除するには、remove() または minus() を使用します。
remove() は元のセットから削除され、minus() は元のセットからは削除されずに、削除した新しいセットを返します。
また、drop() でも削除できますが、drop() を使う必要がある場合は、セットではなく、リストを使った方が良いかもしれません。
val set1 = mutableSetOf("a", "b", "c", "d", "e")

set1.remove("d")
set1.remove("e")
println(set1) // [a, b, c]

val set2 = set1.drop(2)
println(set2) // [c]
println(set1) // [a, b, c]

val set1 = mutableSetOf("a", "b", "c", "d", "e")

val set2 = set1.minus("e")
println(set2) // [a, b, c, d]
println(set1) // [a, b, c, d, e] // 元のセットは影響を受けない


8. 和集合

2つの集合の和を求めます。重複する値は1つになります。
val set1 = setOf("a", "b", "c", "d")
val set2 = setOf(          "c", "d", "e", "f")
val set3 = set1 union set2
//val set3 = set1.union(set2) // 上記と同じ意味

println(set3) // [a, b, c, d, e, f]


9. 積集合

2つの集合の積(重複する値)を求めます。
val set1 = setOf("a", "b", "c", "d")
val set2 = setOf(          "c", "d", "e", "f")
val set3 = set1 intersect set2
//val set3 = set1.intersect(set2) // 上記と同じ意味

println(set3) // [c, d]


10. 差集合

集合から集合を引きます。
val set1 = setOf("a", "b", "c", "d")
val set2 = setOf(          "c", "d", "e", "f")
val set3 = set1 subtractset2
//val set3 = set1.subtract(set2) // 上記と同じ意味

println(set3) // [a, b]