回答:
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
。これらの関数はのSet
代わりにを生成し、List
よりも少し効率的ですdistinct
。
あなたは役に立つかもしれません:
toSet
またはtoMutableSet
を使用することもできますが、オーバーヘッドが少なくdistinct
、順序が重要でない場合は使用できますtoHashSet
。
to*Set
より効率的(空間と時間)であり、2)は完全なオブジェクトの等価比較を回避できるため、単純な場合よりも効率的です。どちらも有効なポイントです。私は「確かに常にオーバーヘッドがあるわけではない」というあなたの発言を実行しましたが、私はそれに返信していて、あなたが(ではなく)と比較しているのを見過ごしていました。distinct[By]
Set
Set
List
distinctBy
distinct
distinct
distinctBy
to*Set
Iterable.distinct
実際にはtoMutableSet().toList()
内部で行われます。パフォーマンスについては気にしないでください:-)