উত্তর:
আপনার দুটি পছন্দ আছে:
প্রথম এবং সর্বাধিক পারফরম্যান্ট হ'ল associateBy
ফাংশনটি ব্যবহার করা যা কী এবং মান উৎপন্ন করার জন্য দুটি ল্যাম্বডাস গ্রহণ করে এবং মানচিত্রের সৃজনকে ইনলাইন করে:
val map = friends.associateBy({it.facebookId}, {it.points})
দ্বিতীয়, কম পারফরম্যান্ট, হ'ল স্ট্যান্ডার্ড map
ফাংশনটি একটি তালিকা তৈরি Pair
করতে ব্যবহার করে toMap
যা এর মাধ্যমে চূড়ান্ত মানচিত্র তৈরি করতে ব্যবহার করা যেতে পারে :
val map = friends.map { it.facebookId to it.points }.toMap()
Pair
দৃষ্টান্তের বরাদ্দ বড় সংগ্রহের জন্য খুব ব্যয়বহুল হতে পারে
List
থেকে Map
সঙ্গে associate
ফাংশনকোটলিন ১.৩ সহ List
একটি ফাংশন ডাকা হয় associate
। associate
নিম্নলিখিত ঘোষণা আছে:
fun <T, K, V> Iterable<T>.associate(transform: (T) -> Pair<K, V>): Map<K, V>
প্রদত্ত সংগ্রহের উপাদানগুলিতে প্রয়োগ
Map
করেtransform
ফাংশন দ্বারা সরবরাহিত একটি মূল- মানযুক্ত জোড় যুক্ত করে ।
ব্যবহার:
class Person(val name: String, val id: Int)
fun main() {
val friends = listOf(Person("Sue Helen", 1), Person("JR", 2), Person("Pamela", 3))
val map = friends.associate({ Pair(it.id, it.name) })
//val map = friends.associate({ it.id to it.name }) // also works
println(map) // prints: {1=Sue Helen, 2=JR, 3=Pamela}
}
List
থেকে Map
সঙ্গে associateBy
ফাংশনকোটলিন সহ, List
একটি ফাংশন বলা হয় associateBy
। associateBy
নিম্নলিখিত ঘোষণা আছে:
fun <T, K, V> Iterable<T>.associateBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, V>
প্রদত্ত সংগ্রহের উপাদানগুলিতে প্রয়োগিত ফাংশনগুলি দ্বারা
Map
সরবরাহ করাvalueTransform
এবং সূচকযুক্ত একটি মান প্রদান করেkeySelector
।
ব্যবহার:
class Person(val name: String, val id: Int)
fun main() {
val friends = listOf(Person("Sue Helen", 1), Person("JR", 2), Person("Pamela", 3))
val map = friends.associateBy(keySelector = { person -> person.id }, valueTransform = { person -> person.name })
//val map = friends.associateBy({ it.id }, { it.name }) // also works
println(map) // prints: {1=Sue Helen, 2=JR, 3=Pamela}
}
* তথ্যসূত্র: কোটলিন ডকুমেন্টেশন
1- সহযোগী (কী এবং মান উভয় সেট করার জন্য): মানচিত্র তৈরি করুন যা কী এবং মান উপাদানগুলি সেট করতে পারে:
IterableSequenceElements.associate { newKey to newValue } //Output => Map {newKey : newValue ,...}
দুটি জোড়ের যে কোনওটির যদি একই কী থাকে তবে শেষেরটি মানচিত্রে যুক্ত হয়।
প্রত্যাবর্তিত মানচিত্রটি মূল অ্যারের প্রবেশ পুনরাবৃত্তি ক্রম সংরক্ষণ করে।
2- সহযোগী বাই (কেবল গণনার দ্বারা কীগুলি সেট করুন): একটি মানচিত্র তৈরি করুন যা আমরা নতুন কীগুলি সেট করতে পারি, অ্যালবাম উপাদানগুলি মানগুলির জন্য সেট করা হবে
IterableSequenceElements.associateBy { newKey } //Result: => Map {newKey : 'Values will be set from analogous IterableSequenceElements' ,...}
3- সহযোগীযুক্ত (গণনা অনুসারে মানগুলি সেট করুন): একটি মানচিত্র তৈরি করুন যা আমরা নতুন মান নির্ধারণ করতে পারি, মূল উপাদানগুলি কীগুলির জন্য সেট করা হবে
IterableSequenceElements.associateWith { newValue } //Result => Map { 'Keys will be set from analogous IterableSequenceElements' : newValue , ...}
আপনি যদি সদৃশ আপনার তালিকায় যে তোমাকে হারাতে চাই না, আপনি এই ব্যবহার করতে পারেনgroupBy
।
অন্যথায়, অন্য সবার মতো বলেছিলেন, ব্যবহার করুন associate/By/With
(যা সদৃশগুলির ক্ষেত্রে, আমি বিশ্বাস করি, কেবলমাত্র সেই চাবির সাহায্যে শেষ মানটি ফিরিয়ে দেবে)।
বয়স অনুসারে লোকের তালিকা গোষ্ঠীকরণ একটি উদাহরণ:
class Person(val name: String, val age: Int)
fun main() {
val people = listOf(Person("Sue Helen", 31), Person("JR", 25), Person("Pamela", 31))
val duplicatesKept = people.groupBy { it.age }
val duplicatesLost = people.associateBy({ it.age }, { it })
println(duplicatesKept)
println(duplicatesLost)
}
ফলাফল:
{31=[Person@41629346, Person@4eec7777], 25=[Person@3b07d329]}
{31=Person@4eec7777, 25=Person@3b07d329}