Bir Array<String?>in kotlin'den kopyalar nasıl kaldırılır ?
Yanıtlar:
distinctUzantı 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 distinctByiş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, toMutableSetve orijinal siparişin korunmasına ihtiyacınız yoksa toHashSet. Bu işlevler a Setyerine a üretir Listve bundan biraz daha verimli olmalıdır distinct.
Yararlı bulabilirsiniz:
toSetveya toMutableSetdaha az ek yükü olan distinctve sipariş önemli değilse kullanabilirsiniz toHashSet.
to*Setdaha etkilidir (uzay ve zaman) distinct[By]o döndürdüğü için Setyerine doğrudan bir kullanarak Setdahili ve bir dönüştürerek List) dönüş değeri ve 2 gibi distinctByolduğunu distincttam 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ı distinctile distinctBy(ve ile to*Set).
Iterable.distinctaslında toMutableSet().toList()dahili olarak yapar . Bu yüzden performans konusunda endişelenme :-)