【发布时间】:2021-01-09 14:55:15
【问题描述】:
我想在不消除重复项的情况下查找两个列表之间的共同元素的数量。
例如:
输入:[1, 3, 3] & [4, 3, 3]
输出:2,因为公共元素是[3, 3]
输入:[1, 2, 3] & [4, 3, 3]
输出:1,因为公共元素是[3]
如果我使用 Kotlin 集合 intersect,结果是一个集合,这将阻止我计算重复值。
我发现(对于 Python)this,它以不同方式处理重复项和 this,这导致我使用 this 实现,其中 a 和 b 是列表:
val aCounts = a.groupingBy { it }.eachCount()
val bCounts = b.groupingBy { it }.eachCount()
var intersectionCount = 0;
for ((k, v) in aCounts) {
intersectionCount += Math.min(v, bCounts.getOrDefault(k, 0))
}
但是,作为 Kotlin 的新手,我想知道是否有更“Kotlin-y”的方式来做到这一点——利用 Kotlin 的所有集合功能?也许可以避免显式迭代?
【问题讨论】:
标签: collections kotlin