【发布时间】:2017-03-18 17:42:03
【问题描述】:
如何从 kotlin 中的 Array<String?> 中删除重复项?
【问题讨论】:
-
如果有人正在寻找要删除的连续字符,请访问handyopinion.com/…
如何从 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 更高效。
您可能会觉得有用:
【讨论】:
toSet 或toMutableSet,它们的开销低于distinct,如果订购不重要,您可以使用toHashSet。
to*Set 比 distinct[By] 更有效(空间和时间),因为它直接返回 Set在内部使用 Set 并将其转换为 List 作为其返回值和 2) distinctBy 可能比 distinct 更有效,因为您可以避免完整的对象相等比较。两者都是有效点。我接受了您的陈述,即“当然它并不总是有开销”,我正在回复这个问题并忽略了您将 distinct 与 distinctBy 进行比较(而不是与 to*Set 进行比较)。
Iterable.distinct 实际上在内部执行toMutableSet().toList()。所以不用担心性能:-)