Bir Array<String?>
in kotlin'den kopyalar nasıl kaldırılır ?
Yanıtlar:
distinct
Uzantı işlevini kullanın :
val a = arrayOf("a", "a", "b", "c", "c")
val b = a.distinct() // ["a", "b", "c"]
Birinin öğeleri nasıl ayırt edeceğini belirlemesine izin veren distinctBy
işlev de vardır :
val a = listOf("a", "b", "ab", "ba", "abc")
val b = a.distinctBy { it.length } // ["a", "ab", "abc"]
@ Mfulton26'nın önerdiği gibi toSet
, toMutableSet
ve orijinal siparişin korunmasına ihtiyacınız yoksa toHashSet
. Bu işlevler a Set
yerine a üretir List
ve bundan biraz daha verimli olmalıdır distinct
.
Yararlı bulabilirsiniz:
toSet
veya toMutableSet
daha az ek yükü olan distinct
ve sipariş önemli değilse kullanabilirsiniz toHashSet
.
to*Set
daha etkilidir (uzay ve zaman) distinct[By]
o döndürdüğü için Set
yerine doğrudan bir kullanarak Set
dahili ve bir dönüştürerek List
) dönüş değeri ve 2 gibi distinctBy
olduğunu distinct
tam nesne eşitliği karşılaştırmasından kaçınabileceğiniz için daha verimli olabilir. Her ikisi de geçerli noktalardır. Ben "kesinlikle her zaman havai yok" senin ifadesiyle koştum ve o yanıtlarken ve karşılaştırmakta olduğunu gözardı distinct
ile distinctBy
(ve ile to*Set
).
Iterable.distinct
aslında toMutableSet().toList()
dahili olarak yapar . Bu yüzden performans konusunda endişelenme :-)