जवाबों:
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अधिक कुशल (स्थान और समय) की तुलना में अधिक है distinct[By]क्योंकि यह आंतरिक रूप Setसे उपयोग करने के बजाय सीधे रिटर्न देता है Setऔर इसे Listअपने वापसी मूल्य और 2 के रूप में परिवर्तित करता distinctByहै। distinctकेवल इसलिए की तुलना में अधिक कुशल हो सकता है क्योंकि आप पूर्ण वस्तु समानता तुलना से बच सकते हैं। दोनों वैध बिंदु हैं। मैं अपने बयान के साथ भाग गया है कि "निश्चित रूप से यह हमेशा भूमि के ऊपर नहीं है" और मुझे लगता है कि का जवाब दे रहे था और अनदेखी की है कि आप की तुलना कर रहे थे distinctके साथ distinctBy(और नहीं के साथ to*Set)।
Iterable.distinctवास्तव में toMutableSet().toList()आंतरिक रूप से करता है । तो प्रदर्शन के बारे में चिंता न करें :-)