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()অভ্যন্তরীণভাবে করে। সুতরাং কর্মক্ষমতা সম্পর্কে চিন্তা করবেন না :-)