Я хочу найти количество общих элементов между двумя списками без удаления дубликатов.
Например:
вход: [1, 3, 3]
& [4, 3, 3]
выход: 2
, поскольку общими элементами являются [3, 3]
вход: [1, 2, 3]
& [4, 3, 3]
выход: 1
, поскольку общими элементами являются [3]
Если бы я использовалКоллекции Kotlin пересекаются , в результате получается набор, который не позволит мне считать дубликаты значений.
Я нашел (для Python) 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функциональность?Может быть, что-то, что избегает явной итерации?