在过滤某些键时将HashMap转换为IntArray

时间:2018-06-07 11:33:39

标签: collections kotlin

我正在尝试在Kotlin中实现一个简单的算法,它只能在数组中找到唯一的数字。

我无法弄清楚如何使用值等于1的元素将map转换为uniqueArray

val array: IntArray = intArrayOf(4, 7, 3, 3, 4, 5)
val map: HashMap<Int, Int> = HashMap()

for (x in array) map.merge(x, 1, {v, _ -> v + 1})

// convert the map into an IntArray
val uniqueArray: IntArray = ...

2 个答案:

答案 0 :(得分:1)

您可以使用filter并将结构输入到键和值中,如下所示:

val uniqueArray: IntArray = map
            .filter { (k, v) -> v == 1 }
            .keys
            .toIntArray()

答案 1 :(得分:1)

这是一个完整的算法,不涉及计算实例:

val input = intArrayOf(4, 7, 3, 3, 4, 5)

val duplicates = emptySet<Int>().toMutableSet()
val result = emptySet<Int>().toMutableSet()

for (it in input) {
    if (duplicates.contains(it)) {
        continue
    }
    if (!result.add(it)) {
        result.remove(it)
        duplicates.add(it)
    }
}