الفرق بين المراجعتين لصفحة: «Kotlin/collections/associateBy»

من موسوعة حسوب
لا ملخص تعديل
ط مراجعة وتدقيق.
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة <code>associateBy()‎</code> في لغة Kotlin}}</noinclude>
<noinclude>{{DISPLAYTITLE: الدالة <code>associateBy()‎</code> في لغة Kotlin}}</noinclude>
تعيد الدالة <code>associateBy()‎</code> قاموسًا (map) يحتوي ناتج تمرير عناصر المصفوفة أو المجموعة (<code>[[Kotlin/collections|Collection]]</code>) إلى الدالة <code>valueTransform</code> مُفهرسة بناتج تمرير عناصر المصفوفة أو المجموعة إلى الدالة <code>keySelector</code>.  
تعيد الدالة <code>associateBy()‎</code> خريطةً (map) تحتوي على عناصر المصفوفة أو المجموعة ([[Kotlin/collections|Collection]]) المعطاة مفهرسةً بقيمة المفتاح المعاد من تمرير تلك العناصر إلى الدالة <code>valueTransform</code>.  


ان كان لعنصرين نفس المفتاح (key) بعد تطبيق الدالة<code>keySelector</code> فإن الأخير هو الذي سيُضاف إلى القاموس.
إن كان لعنصرين نفس المفتاح (key) بعد تطبيق الدالة <code>keySelector</code>، فإنَّ الأخير هو الذي سيُضاف إلى الخريطة.


القاموس المُعاد يحافظ على نفس ترتيب التكرار الخاص بالمصفوفة أو المجموعة الأصلية.
تحافظ الخريطة المُعادة على نفس ترتيب التكرار الخاص بالمصفوفة أو المجموعة الأصليَّة.
==البنية العامة==
==البنية العامة==
في حال استدعاء الدالة <code>associateBy()‎</code>عبر مصفوفة فستعيد قاموسًا (map) يحتوي عناصر المصفوفة مُفهرسة بناتج تمرير عناصر المصفوفة إلى الدالة <code>keySelector:</code><syntaxhighlight lang="kotlin">
إن استدعيت الدالة <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>في حال استدعاء الدالة <code>associateBy()‎</code>عبر  مصفوفة فستعيد قاموسًا (map) يحتوي ناتج تمرير عناصر المصفوفة إلى الدالة <code>valueTransform</code> مُفهرسة بناتج تمرير عناصر المصفوفة إلى الدالة <code>keySelector:</code><syntaxhighlight lang="kotlin">
</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>في حال استدعاء الدالة <code>associateBy()‎</code>عبر مجموعة (<code>[[Kotlin/collections|Collection]]</code>) فستعيد قاموسًا (map) يحتوي عناصر المجموعة مُفهرسة بناتج تمرير عناصر المجموعة إلى الدالة <code>keySelector:</code><syntaxhighlight lang="kotlin">
</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>في حال استدعاء الدالة <code>associateBy()‎</code>عبر  مجموعة (<code>[[Kotlin/collections|Collection]]</code>) فستعيد قاموسًا (map) يحتوي ناتج تمرير عناصر المجموعة (<code>[[Kotlin/collections|Collection]]</code>) إلى الدالة <code>valueTransform</code> مُفهرسة بناتج تمرير عناصر  المجموعة إلى الدالة <code>keySelector:</code><syntaxhighlight lang="kotlin">
</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>يُلاحَظ وجود الكلمة المفتاحية <code>inline</code> للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]].
</syntaxhighlight>وجود الكلمة المفتاحية <code>inline</code> يدل على أن هذه الدالة مباشرة (للمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]]).


==القيم المعادة==
==القيم المعادة==
قاموس. (انظر شرح الدالة أعلاه لمزيد من التفاصيل)
خريطةً (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">
تعرف الشيفرة الآتية قائمة باسم <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')
سطر 74: سطر 74:
}
}
</syntaxhighlight>
</syntaxhighlight>
===استخدام الدالة <code>()associateBy</code> مع اللوائح بتمرير دالتين===
===استخدام الدالة <code>()associateBy</code> مع القوائم بتمرير دالتين===
تعرف الشيفرة الآتية لائحة باسم <code>list</code> مكونة من ثلاثة أحرف باستخدام الدالة <code>()listOf</code>، ثم تنشئ قاموسًا باسم <code>map</code> بتمرير الدالة <code>()upper</code> (التي تحول الحروف إلى الحالة UpperCase) والدالة<code>()multr</code> (التي تحول الحروف إلى عدد) إلى<code>()associateBy</code> ثم تطبع الناتج:<syntaxhighlight lang="kotlin">
تعرِّف الشيفرة الآتية قائمة باسم <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')
سطر 85: سطر 85:
</syntaxhighlight>
</syntaxhighlight>
==انظر أيضًا==
==انظر أيضًا==
*<code>[[Kotlin/collections/associate|associate()]]</code>‎: تعيد قاموسًا (map).  
*الدالة <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) والتي تُغلّف المصفوفة الاصلية وتعيد عناصرها عندما تُستخدم في حلقات التكرار (مثل<code>[[Kotlin/control flow#.D8.AA.D8.B9.D8.A8.D9.8A.D8.B1 for|for]]</code>).


==مصادر==
==مصادر==

مراجعة 09:09، 3 يوليو 2018

تعيد الدالة associateBy()‎ خريطةً (map) تحتوي على عناصر المصفوفة أو المجموعة (Collection) المعطاة مفهرسةً بقيمة المفتاح المعاد من تمرير تلك العناصر إلى الدالة 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)).

القيم المعادة

خريطةً (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).

مصادر