الفرق بين المراجعتين لصفحة: «Kotlin/collections/associateBy»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) طلا ملخص تعديل |
||
(9 مراجعات متوسطة بواسطة 3 مستخدمين غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: الدالة <code>associateBy()</code> في | <noinclude>{{DISPLAYTITLE: الدالة <code>associateBy()</code> في Kotlin}}</noinclude> | ||
تعيد الدالة <code>associateBy()</code> | تعيد الدالة <code>associateBy()</code> خريطةً (map) مكونة من الأزواج "مفتاح/قيمة"، إذ يكون المفتاح (key) هو الناتج الذي تعيده الدالة <code>keySelector</code> الممررة إليها وتكون القيمة (value) المقابلة لذلك المفتاح هي إمَّا عناصر المصفوفة أو المجموعة المعطاة أو الناتج الذي تعيده الدالة <code>valueTransform</code> الممررة. | ||
إن كان لعنصرين نفس المفتاح (key) بعد تطبيق الدالة <code>keySelector</code>، فإنَّ الأخير هو الذي سيُضاف إلى الخريطة. | |||
تحافظ الخريطة المُعادة على نفس ترتيب التكرار الخاص بالمصفوفة أو المجموعة الأصليَّة. | |||
==البنية العامة== | ==البنية العامة== | ||
إن استدعيت الدالة <code>associateBy()</code>مع مصفوفة، فستعيد خريطةً (map) تحتوي على عناصر المصفوفة مُفهرسة بناتج تمرير هذه العناصر إلى الدالة <code>keySelector</code>:<syntaxhighlight lang="kotlin"> | |||
inline fun <T, K> Array<out T>.associateBy(keySelector: (T) -> K): Map<K, T> | 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> ByteArray.associateBy(keySelector: (Byte) -> K): Map<K, Byte> | ||
سطر 16: | سطر 16: | ||
inline fun <K> BooleanArray.associateBy(keySelector: (Boolean) -> K): Map<K, Boolean> | inline fun <K> BooleanArray.associateBy(keySelector: (Boolean) -> K): Map<K, Boolean> | ||
inline fun <K> CharArray.associateBy(keySelector: (Char) -> K): Map<K, Char> | inline fun <K> CharArray.associateBy(keySelector: (Char) -> K): Map<K, Char> | ||
</syntaxhighlight> | </syntaxhighlight>إن استدعيت الدالة <code>associateBy()</code>مع مصفوفة، فستعيد خريطةً (map) تحتوي على عناصر المصفوفة مُفهرسة بناتج تمرير هذه العناصر إلى الدالة <code>keySelector</code>:<syntaxhighlight lang="kotlin"> | ||
inline fun <T, K, V> Array<out T>.associateBy( | inline fun <T, K, V> Array<out T>.associateBy( | ||
keySelector: (T) -> K, | keySelector: (T) -> K, | ||
سطر 53: | سطر 53: | ||
valueTransform: (Char) -> V | valueTransform: (Char) -> V | ||
): Map<K, V> | ): Map<K, V> | ||
</syntaxhighlight> | </syntaxhighlight>إن استدعيت الدالة <code>associateBy()</code> مع مجموعة ([[Kotlin/collections|Collection]])، فستعيد خريطةً (map) تحتوي على عناصر المجموعة مُفهرسة بالناتج المعاد من تمرير هذه العناصر إلى الدالة <code>keySelector</code>:<syntaxhighlight lang="kotlin"> | ||
inline fun <T, K> Iterable<T>.associateBy(keySelector: (T) -> K): Map<K, T> | inline fun <T, K> Iterable<T>.associateBy(keySelector: (T) -> K): Map<K, T> | ||
</syntaxhighlight> | </syntaxhighlight>إن استدعيت الدالة <code>associateBy()</code> مع مجموعة ([[Kotlin/collections|Collection]])، فستعيد خريطةً (map) تحتوي على عناصر المجموعة مُفهرسة بالناتج المعاد من تمرير هذه العناصر إلى الدالة <code>keySelector</code>:<syntaxhighlight lang="kotlin"> | ||
inline fun <T, K, V> Iterable<T>.associateBy( | inline fun <T, K, V> Iterable<T>.associateBy( | ||
keySelector: (T) -> K, | keySelector: (T) -> K, | ||
valueTransform: (T) -> V | valueTransform: (T) -> V | ||
): Map<K, V> | ): Map<K, V> | ||
</syntaxhighlight> | </syntaxhighlight>وجود الكلمة المفتاحية <code>inline</code> يدل على أن هذه الدالة مباشرة (للمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]]). | ||
== المعاملات == | |||
=== <code>keySelector</code> === | |||
دالةٌ يمرر إليها كل عنصر من عناصر المصفوفة أو المجموعة المعطاة على حدة وتعيد المفتاح المقابل لذلك العنصر المراد وضعه في الخريطة. | |||
=== <code>valueTransform</code> === | |||
دالةٌ يمرر إليها كل عنصر من عناصر المصفوفة أو المجموعة المعطاة على حدة وتعيد القيمة المقابلة لذلك العنصر المراد وضعها في الخريطة. | |||
==القيم المعادة== | ==القيم المعادة== | ||
تُعاد خريطةٌ (map) تحتوي على عناصر المصفوفة أو المجموعة المعطاة مُفهرسة بناتج تمرير هذه العناصر إلى الدالة <code>keySelector</code>. | |||
==أمثلة== | ==أمثلة== | ||
===استخدام الدالة <code>()associateBy</code> مع | ===استخدام الدالة <code>()associateBy</code> مع القوائم بتمرير دالة واحدة=== | ||
تعرف الشيفرة الآتية | تعرف الشيفرة الآتية قائمة باسم <code>list</code> مكونة من ثلاثة أحرف باستخدام الدالة <code>()listOf</code>، ثمَّ تنشئ خريطةً باسم <code>map</code> بتمرير الدالة <code>()upper</code> (التي تحول الحروف إلى الحالة الكبيرة [UpperCase]) إلى<code>()associateBy</code> ثم تطبع الناتج:<syntaxhighlight lang="kotlin"> | ||
fun main(args: Array<String>) { | fun main(args: Array<String>) { | ||
val list = listOf('a','b','c') | val list = listOf('a', 'b', 'c') | ||
val upper: (Char) -> Char = {it.toUpperCase()} | val upper: (Char) -> Char = { | ||
it.toUpperCase() | |||
} | |||
val map = list.associateBy(upper) | val map = list.associateBy(upper) | ||
println(map) // {A=a, B=b, C=c} | println(map) // {A=a, B=b, C=c} | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===استخدام الدالة <code>()associateBy</code> مع | ===استخدام الدالة <code>()associateBy</code> مع القوائم بتمرير دالتين=== | ||
تعرِّف الشيفرة الآتية قائمة باسم <code>list</code> مكوَّنة من ثلاثة أحرف باستخدام الدالة <code>()listOf</code> ثم تنشئ خريطةً باسم <code>map</code> بتمرير الدالة <code>()upper</code> (التي تحول الحروف إلى الحالة الكبيرة [UpperCase]) إلى <code>()associateBy</code> ثمَّ تطبع الناتج:<syntaxhighlight lang="kotlin"> | |||
fun main(args: Array<String>) { | fun main(args: Array<String>) { | ||
val list = listOf('a','b','c') | val list = listOf('a', 'b', 'c') | ||
val upper: (Char) -> Char = {it.toUpperCase()} | val upper: (Char) -> Char = { | ||
val mult: (Char) -> Int = {it.toInt()} | it.toUpperCase() | ||
} | |||
val mult: (Char) -> Int = { | |||
it.toInt() | |||
} | |||
val map = list.associateBy(upper, mult) | val map = list.associateBy(upper, mult) | ||
println(map) // {A=97, B=98, C=99} | println(map) // {A=97, B=98, C=99} | ||
سطر 85: | سطر 99: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==انظر أيضًا== | ==انظر أيضًا== | ||
*<code>[[Kotlin/collections/associate|associate()]]</code>: تعيد | *الدالة <code>[[Kotlin/collections/associate|associate()]]</code>: تعيد خريطةً (map) تحوي أزواجًا من "مفتاح/قيمة" ناتجة عن تمرير عناصر المصفوفة أو المجموعة ([[Kotlin/collections|Collection]]) إلى الدالة <code>transform</code>. | ||
*<code>[[Kotlin/collections/asList|asList()]]</code>: تعيد لائحة | *الدالة <code>[[Kotlin/collections/asList|asList()]]</code>: تعيد لائحة تُغلّف المصفوفة الأصلية. | ||
* الدالة <code>[[Kotlin/collections/asIterable|asIterable()]]</code>: تُنشئ نسخة تكرارية (Iterable instance) تُغلّف المصفوفة الأصلية وتعيد عناصرها عندما تُستخدم في حلقات التكرار (مثل <code>[[Kotlin/control flow#.D8.AA.D8.B9.D8.A8.D9.8A.D8.B1 for|for]]</code>). | |||
* <code>[[Kotlin/collections/asIterable|asIterable()]]</code>: تُنشئ نسخة تكرارية (Iterable instance) | |||
==مصادر== | ==مصادر== | ||
*[https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/associate-by.html الدالة | *[https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/associate-by.html صفحة الدالة associate() في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.] | ||
[[تصنيف:Kotlin]] | [[تصنيف:Kotlin]] | ||
[[تصنيف:Kotlin | [[تصنيف:Kotlin Function]] | ||
[[تصنيف:Kotlin Collection]] |
المراجعة الحالية بتاريخ 07:05، 8 سبتمبر 2018
تعيد الدالة associateBy()
خريطةً (map) مكونة من الأزواج "مفتاح/قيمة"، إذ يكون المفتاح (key) هو الناتج الذي تعيده الدالة keySelector
الممررة إليها وتكون القيمة (value) المقابلة لذلك المفتاح هي إمَّا عناصر المصفوفة أو المجموعة المعطاة أو الناتج الذي تعيده الدالة valueTransform
الممررة.
إن كان لعنصرين نفس المفتاح (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) تحتوي على عناصر المصفوفة مُفهرسة بناتج تمرير هذه العناصر إلى الدالة 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) تحتوي على عناصر المجموعة مُفهرسة بالناتج المعاد من تمرير هذه العناصر إلى الدالة keySelector
:
inline fun <T, K, V> Iterable<T>.associateBy(
keySelector: (T) -> K,
valueTransform: (T) -> V
): Map<K, V>
وجود الكلمة المفتاحية inline
يدل على أن هذه الدالة مباشرة (للمزيد من التفاصيل راجع توثيق الدوال المباشرة (inline functions)).
المعاملات
keySelector
دالةٌ يمرر إليها كل عنصر من عناصر المصفوفة أو المجموعة المعطاة على حدة وتعيد المفتاح المقابل لذلك العنصر المراد وضعه في الخريطة.
valueTransform
دالةٌ يمرر إليها كل عنصر من عناصر المصفوفة أو المجموعة المعطاة على حدة وتعيد القيمة المقابلة لذلك العنصر المراد وضعها في الخريطة.
القيم المعادة
تُعاد خريطةٌ (map) تحتوي على عناصر المصفوفة أو المجموعة المعطاة مُفهرسة بناتج تمرير هذه العناصر إلى الدالة keySelector
.
أمثلة
استخدام الدالة ()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]) إلى ()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) تحوي أزواجًا من "مفتاح/قيمة" ناتجة عن تمرير عناصر المصفوفة أو المجموعة (Collection) إلى الدالةtransform
. - الدالة
asList()
: تعيد لائحة تُغلّف المصفوفة الأصلية. - الدالة
asIterable()
: تُنشئ نسخة تكرارية (Iterable instance) تُغلّف المصفوفة الأصلية وتعيد عناصرها عندما تُستخدم في حلقات التكرار (مثلfor
).