如何从 kotlin 中的 Array<String?>
中删除重复项?
使用 distinct
extension function:
val a = arrayOf("a", "a", "b", "c", "c")
val b = a.distinct() // ["a", "b", "c"]
还有 distinctBy
function 允许人们指定如何区分项目:
val a = listOf("a", "b", "ab", "ba", "abc")
val b = a.distinctBy { it.length } // ["a", "ab", "abc"]
正如 @mfulton26 所建议的,您还可以使用 toSet
、toMutableSet
,如果您不需要保留原始顺序,则可以使用 toHashSet
。这些函数生成 Set
而不是 List
,并且应该比 distinct
更有效。
您可能会发现有用:
Kotlin 习语
标准 Kotlin 库中有哪些 Java 8 Stream.collect 等效项?
distinct
的toSet
或toMutableSet
,如果排序无关紧要,您可以使用toHashSet
。to*Set
比distinct[By]
更有效(空间和时间),因为它直接返回Set
而不是在内部使用Set
并将其转换为List
作为其返回值,并且 2)distinctBy
可能比distinct
更有效,因为您可以避免完整的对象相等比较。两者都是有效点。我与您的陈述“当然它并不总是有开销”一起运行,我正在回复它并忽略了您将distinct
与distinctBy
(而不是to*Set
)进行比较。Iterable.distinct
实际上在内部执行toMutableSet().toList()
。所以不用担心性能:-)