Array<String?>
কোটলিনে একটি থেকে সদৃশ কীভাবে সরানো যায়?
উত্তর:
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()
অভ্যন্তরীণভাবে করে। সুতরাং কর্মক্ষমতা সম্পর্কে চিন্তা করবেন না :-)