الدالة associateBy()
في لغة Kotlin
تعيد الدالة associateBy()
قاموسًا (map) يحتوي ناتج تمرير عناصر المصفوفة أو المجموعة (Collection
) إلى الدالة valueTransform
مُفهرسة بناتج تمرير عناصر المصفوفة أو المجموعة إلى الدالة keySelector
.
ان كان لعنصرين نفس المفتاح (key) بعد تطبيق الدالةkeySelector
فإن الأخير هو الذي سيُضاف إلى القاموس.
القاموس المُعاد يحافظ على نفس ترتيب التكرار الخاص بالمصفوفة أو المجموعة الأصلية.
البنية العامة
في حال استدعاء الدالة associateBy()
عبر مصفوفة فستعيد قاموسًا (map) يحتوي عناصر المصفوفة مُفهرسة بناتج تمرير عناصر المصفوفة إلى الدالة keySelector:
inline fun <T, K> Array<out T>.associateBy(keySelector: (T) -> K): Map<K, T>
inline fun <K> ByteArray.associateBy(keySelector: (Byte) -> K): Map<K, Byte>
inline fun <K> ShortArray.associateBy(keySelector: (Short) -> K): Map<K, Short>
inline fun <K> IntArray.associateBy(keySelector: (Int) -> K): Map<K, Int>
inline fun <K> LongArray.associateBy(keySelector: (Long) -> K): Map<K, Long>
inline fun <K> FloatArray.associateBy(keySelector: (Float) -> K): Map<K, Float>
inline fun <K> DoubleArray.associateBy(keySelector: (Double) -> K): Map<K, Double>
inline fun <K> BooleanArray.associateBy(keySelector: (Boolean) -> K): Map<K, Boolean>
inline fun <K> CharArray.associateBy(keySelector: (Char) -> K): Map<K, Char>
في حال استدعاء الدالة associateBy()
عبر مصفوفة فستعيد قاموسًا (map) يحتوي ناتج تمرير عناصر المصفوفة إلى الدالة valueTransform
مُفهرسة بناتج تمرير عناصر المصفوفة إلى الدالة keySelector:
inline fun <T, K, V> Array<out T>.associateBy(
keySelector: (T) -> K,
valueTransform: (T) -> V
): Map<K, V>
inline fun <K, V> ByteArray.associateBy(
keySelector: (Byte) -> K,
valueTransform: (Byte) -> V
): Map<K, V>
inline fun <K, V> ShortArray.associateBy(
keySelector: (Short) -> K,
valueTransform: (Short) -> V
): Map<K, V>
inline fun <K, V> IntArray.associateBy(
keySelector: (Int) -> K,
valueTransform: (Int) -> V
): Map<K, V>
inline fun <K, V> LongArray.associateBy(
keySelector: (Long) -> K,
valueTransform: (Long) -> V
): Map<K, V>
inline fun <K, V> FloatArray.associateBy(
keySelector: (Float) -> K,
valueTransform: (Float) -> V
): Map<K, V>
inline fun <K, V> DoubleArray.associateBy(
keySelector: (Double) -> K,
valueTransform: (Double) -> V
): Map<K, V>
inline fun <K, V> BooleanArray.associateBy(
keySelector: (Boolean) -> K,
valueTransform: (Boolean) -> V
): Map<K, V>
inline fun <K, V> CharArray.associateBy(
keySelector: (Char) -> K,
valueTransform: (Char) -> V
): Map<K, V>
في حال استدعاء الدالة associateBy()
عبر مجموعة (Collection
) فستعيد قاموسًا (map) يحتوي عناصر المجموعة مُفهرسة بناتج تمرير عناصر المجموعة إلى الدالة keySelector:
inline fun <T, K> Iterable<T>.associateBy(keySelector: (T) -> K): Map<K, T>
في حال استدعاء الدالة associateBy()
عبر مجموعة (Collection
) فستعيد قاموسًا (map) يحتوي ناتج تمرير عناصر المجموعة (Collection
) إلى الدالة valueTransform
مُفهرسة بناتج تمرير عناصر المجموعة إلى الدالة keySelector:
inline fun <T, K, V> Iterable<T>.associateBy(
keySelector: (T) -> K,
valueTransform: (T) -> V
): Map<K, V>
يُلاحَظ وجود الكلمة المفتاحية inline
للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع توثيق الدوال المباشرة (inline functions).
القيم المعادة
قاموس. (انظر شرح الدالة أعلاه لمزيد من التفاصيل)
أمثلة
استخدام الدالة ()associateBy
مع اللوائح بتمرير دالة واحدة
تعرف الشيفرة الآتية لائحة باسم list
مكونة من ثلاثة أحرف باستخدام الدالة ()listOf
، ثم تنشئ قاموسًا باسم map
بتمرير الدالة ()upper
(التي تحول الحروف إلى الحالة UpperCase) إلى()associateBy
ثم تطبع الناتج:
fun main(args: Array<String>) {
val list = listOf('a','b','c')
val upper: (Char) -> Char = {it.toUpperCase()}
val map = list.associateBy(upper)
println(map) // {A=a, B=b, C=c}
}
استخدام الدالة ()associateBy
مع اللوائح بتمرير دالتين
تعرف الشيفرة الآتية لائحة باسم list
مكونة من ثلاثة أحرف باستخدام الدالة ()listOf
، ثم تنشئ قاموسًا باسم map
بتمرير الدالة ()upper
(التي تحول الحروف إلى الحالة UpperCase) والدالة()multr
(التي تحول الحروف إلى عدد) إلى()associateBy
ثم تطبع الناتج:
fun main(args: Array<String>) {
val list = listOf('a','b','c')
val upper: (Char) -> Char = {it.toUpperCase()}
val mult: (Char) -> Int = {it.toInt()}
val map = list.associateBy(upper, mult)
println(map) // {A=97, B=98, C=99}
}
انظر أيضًا
associate()
: تعيد قاموسًا (map).asList()
: تعيد لائحة والتي تُغلّف المصفوفة الاصلية.
asIterable()
: تُنشئ نسخة تكرارية (Iterable instance) والتي تُغلّف المصفوفة الاصلية وتعيد عناصرها عندما تُستخدم في حلقات التكرار (مثلfor
).