Answers:
使用distinct
扩展功能:
val a = arrayOf("a", "a", "b", "c", "c")
val b = a.distinct() // ["a", "b", "c"]
还有一项distinctBy
功能,允许您指定如何区分项目:
val a = listOf("a", "b", "ab", "ba", "abc")
val b = a.distinctBy { it.length } // ["a", "ab", "abc"]
正如@ mfulton26建议的那样,您也可以使用toSet
,toMutableSet
如果不需要保留原始顺序,也可以使用toHashSet
。这些函数产生a Set
而不是a,List
并且应该比效率更高distinct
。
您可能会发现有用的:
toSet
或toMutableSet
,其开销要小于distinct
和如果订购无关紧要,则可以使用toHashSet
。
to*Set
比更有效(空间和时间)distinct[By]
,因为它返回的Set
,而不是直接使用Set
内部并将其转换为一个List
作为它的返回值和2)distinctBy
是比distinct
仅仅因为可以避免完整的对象相等性比较而效率更高。两者都是有效点。我赞同您的说法,“肯定不是总是有开销的”,而我在答复时却忽略了您distinct
与distinctBy
(而不是与to*Set
)进行比较。
Iterable.distinct
实际上是在toMutableSet().toList()
内部进行的。因此,不必担心性能问题:-)