どうも、ちょげ(@chogetarou)です。
2つの配列(array)の差分を取得する方法を紹介します。
方法

2つの配列(array)の差分を取得する方法は、2つあります。
filter()
ひとつは、filter()を使う方法です。
まず、2つの配列を結合します。
結合した配列からfilter()を呼び出します。
filter()のクロージャーで、結合した配列から呼び出したcount()の結果が「1」となる場合にtrueとなる条件式を返します。
そして、count()のクロージャーで、引数と配列の要素が等しい時にtrueとなる条件式を返します。
//array1, array2=対象の2つの配列
val newArray = array1 + array2
val result = newArray.filter { item ->
newArray.count { it == item } == 1
}
上記のfilter()は、対象の2つの配列(array)の差分を取得します。
使用例
fun main() {
val nums1 = arrayOf(1, 2, 3, 4, 5)
val nums2 = arrayOf(2, 4, 5, 6)
val array = nums1 + nums2
val result = array.filter { item ->
array.count { it == item } == 1
}
println(result)
}
出力:
[1, 3, 6]
groupingBy()
もうひとつは、groupingBy()を使う方法です。
まず、2つの配列(array)を結合します。
結合した配列(array)から要素をそのまま返すgroupingBy()を呼び出します。
groupintBy()からeachCount()、eachCount()からfilter()を呼び出します。
filter()のクロージャーで、引数の「value」が「1」の場合に「true」となる条件式を返します。
そして、filter()の結果の「keys」にアクセスします。
//array1, array2=対象の2つの配列
val result = (array1 + array2).groupingBy { it }
.eachCount()
.filter { it.value == 1 }
.keys
上記のfilter()のkeysにアクセスすることで、対象の2つの配列(array)の差分を取得できます。
使用例
fun main() {
val nums1 = arrayOf(1, 2, 3, 4, 5)
val nums2 = arrayOf(2, 4, 5, 6)
val result = (nums1 + nums2).groupingBy { it }
.eachCount()
.filter { it.value == 1 }
.keys
println(result)
}
出力:
[1, 3, 6]
まとめ
2つの配列(array)の差分を取得する方法は、次の2つです。
- toMutableList()を使う方法
val newArray = array1 + array2
val result = newArray.filter { item -> newArray.count { it == item } == 1 }
- groupingBy()を使う方法
val result = (array1 + array2).groupingBy { it }.eachCount() .filter { it.value == 1 }.keys
コメント