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

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


ان كان لعنصرين نفس المفتاح (key) بعد تطبيق الدالة<code>keySelector</code> فإن الأخير هو الذي سيُضاف إلى القاموس.
ان كان لعنصرين نفس المفتاح (key) بعد تطبيق الدالة<code>keySelector</code> فإن الأخير هو الذي سيُضاف إلى القاموس.
سطر 6: سطر 6:
القاموس المُعاد يحافظ على نفس ترتيب التكرار الخاص بالمصفوفة أو المجموعة الأصلية.
القاموس المُعاد يحافظ على نفس ترتيب التكرار الخاص بالمصفوفة أو المجموعة الأصلية.
==البنية العامة==
==البنية العامة==
في حال استدعاء الدالة <code>associateBy()‎</code>عبر مصفوفة فستعيد قاموسًا (map) يحتوي عناصر المصفوفة مُفهرسة بناتج تمرير عناصر المصفوفة إلى الدالة <code>keySelector:</code><syntaxhighlight lang="kotlin">
في حال استدعاء الدالة <code>associateByTo()‎</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, M : MutableMap<in K, in T>> Array<out T>.associateByTo(
inline fun <K> ByteArray.associateBy(keySelector: (Byte) -> K): Map<K, Byte>
    destination: M,
inline fun <K> ShortArray.associateBy(keySelector: (Short) -> K): Map<K, Short>
    keySelector: (T) -> K
inline fun <K> IntArray.associateBy(keySelector: (Int) -> K): Map<K, Int>
): M
inline fun <K> LongArray.associateBy(keySelector: (Long) -> K): Map<K, Long>
inline fun <K, M : MutableMap<in K, in Byte>> ByteArray.associateByTo(
inline fun <K> FloatArray.associateBy(keySelector: (Float) -> K): Map<K, Float>
    destination: M,
inline fun <K> DoubleArray.associateBy(keySelector: (Double) -> K): Map<K, Double>
    keySelector: (Byte) -> K
inline fun <K> BooleanArray.associateBy(keySelector: (Boolean) -> K): Map<K, Boolean>
): M
inline fun <K> CharArray.associateBy(keySelector: (Char) -> K): Map<K, Char>
inline fun <K, M : MutableMap<in K, in Short>> ShortArray.associateByTo(
</syntaxhighlight>في حال استدعاء الدالة <code>associateBy()‎</code>عبر  مصفوفة فستعيد قاموسًا (map) يحتوي ناتج تمرير عناصر المصفوفة إلى الدالة <code>valueTransform</code> مُفهرسة بناتج تمرير عناصر المصفوفة إلى الدالة <code>keySelector:</code><syntaxhighlight lang="kotlin">
    destination: M,
inline fun <T, K, V> Array<out T>.associateBy(
    keySelector: (Short) -> K
): M
inline fun <K, M : MutableMap<in K, in Int>> IntArray.associateByTo(
    destination: M,
    keySelector: (Int) -> K
): M
inline fun <K, M : MutableMap<in K, in Long>> LongArray.associateByTo(
    destination: M,
    keySelector: (Long) -> K
): M
inline fun <K, M : MutableMap<in K, in Float>> FloatArray.associateByTo(
    destination: M,
    keySelector: (Float) -> K
): M
inline fun <K, M : MutableMap<in K, in Double>> DoubleArray.associateByTo(
    destination: M,
    keySelector: (Double) -> K
): M
inline fun <K, M : MutableMap<in K, in Boolean>> BooleanArray.associateByTo(
    destination: M,
    keySelector: (Boolean) -> K
): M
inline fun <K, M : MutableMap<in K, in Char>> CharArray.associateByTo(
    destination: M,
    keySelector: (Char) -> K
): M
</syntaxhighlight>في حال استدعاء الدالة <code>associateByTo()‎</code>عبر  مصفوفة فستعيد قاموسًا (map) يحتوي ناتج تمرير عناصر المصفوفة إلى الدالة <code>valueTransform</code> مُفهرسة بناتج تمرير عناصر المصفوفة إلى الدالة <code>keySelector:</code><syntaxhighlight lang="kotlin">
inline fun <T, K, V, M : MutableMap<in K, in V>> Array<out T>.associateByTo(
    destination: M,
     keySelector: (T) -> K,  
     keySelector: (T) -> K,  
     valueTransform: (T) -> V
     valueTransform: (T) -> V
): Map<K, V>
): M
inline fun <K, V> ByteArray.associateBy(
inline fun <K, V, M : MutableMap<in K, in V>> ByteArray.associateByTo(
    destination: M,
     keySelector: (Byte) -> K,  
     keySelector: (Byte) -> K,  
     valueTransform: (Byte) -> V
     valueTransform: (Byte) -> V
): Map<K, V>
): M
inline fun <K, V> ShortArray.associateBy(
inline fun <K, V, M : MutableMap<in K, in V>> ShortArray.associateByTo(
    destination: M,
     keySelector: (Short) -> K,  
     keySelector: (Short) -> K,  
     valueTransform: (Short) -> V
     valueTransform: (Short) -> V
): Map<K, V>
): M
inline fun <K, V> IntArray.associateBy(
inline fun <K, V, M : MutableMap<in K, in V>> IntArray.associateByTo(
    destination: M,
     keySelector: (Int) -> K,  
     keySelector: (Int) -> K,  
     valueTransform: (Int) -> V
     valueTransform: (Int) -> V
): Map<K, V>
): M
inline fun <K, V> LongArray.associateBy(
inline fun <K, V, M : MutableMap<in K, in V>> LongArray.associateByTo(
    destination: M,
     keySelector: (Long) -> K,  
     keySelector: (Long) -> K,  
     valueTransform: (Long) -> V
     valueTransform: (Long) -> V
): Map<K, V>
): M
inline fun <K, V> FloatArray.associateBy(
inline fun <K, V, M : MutableMap<in K, in V>> FloatArray.associateByTo(
    destination: M,
     keySelector: (Float) -> K,  
     keySelector: (Float) -> K,  
     valueTransform: (Float) -> V
     valueTransform: (Float) -> V
): Map<K, V>
): M
inline fun <K, V> DoubleArray.associateBy(
inline fun <K, V, M : MutableMap<in K, in V>> DoubleArray.associateByTo(
    destination: M,
     keySelector: (Double) -> K,  
     keySelector: (Double) -> K,  
     valueTransform: (Double) -> V
     valueTransform: (Double) -> V
): Map<K, V>
): M
inline fun <K, V> BooleanArray.associateBy(
inline fun <K, V, M : MutableMap<in K, in V>> BooleanArray.associateByTo(
    destination: M,
     keySelector: (Boolean) -> K,  
     keySelector: (Boolean) -> K,  
     valueTransform: (Boolean) -> V
     valueTransform: (Boolean) -> V
): Map<K, V>
): M
inline fun <K, V> CharArray.associateBy(
inline fun <K, V, M : MutableMap<in K, in V>> CharArray.associateByTo(
    destination: M,
     keySelector: (Char) -> K,  
     keySelector: (Char) -> K,  
     valueTransform: (Char) -> V
     valueTransform: (Char) -> V
): Map<K, V>
): M
</syntaxhighlight>في حال استدعاء الدالة <code>associateBy()‎</code>عبر مجموعة (<code>[[Kotlin/collections|Collection]]</code>) فستعيد قاموسًا (map) يحتوي عناصر المجموعة مُفهرسة بناتج تمرير عناصر المجموعة إلى الدالة <code>keySelector:</code><syntaxhighlight lang="kotlin">
</syntaxhighlight>في حال استدعاء الدالة <code>associateByTo()‎</code>عبر مجموعة (<code>[[Kotlin/collections|Collection]]</code>) فستعيد قاموسًا (map) يحتوي عناصر المجموعة مُفهرسة بناتج تمرير عناصر المجموعة إلى الدالة <code>keySelector:</code><syntaxhighlight lang="kotlin">
inline fun <T, K> Iterable<T>.associateBy(keySelector: (T) -> K): Map<K, T>
inline fun <T, K, M : MutableMap<in K, in T>> Iterable<T>.associateByTo(
</syntaxhighlight>في حال استدعاء الدالة <code>associateBy()‎</code>عبر  مجموعة (<code>[[Kotlin/collections|Collection]]</code>) فستعيد قاموسًا (map) يحتوي ناتج تمرير عناصر  المجموعة (<code>[[Kotlin/collections|Collection]]</code>) إلى الدالة <code>valueTransform</code> مُفهرسة بناتج تمرير عناصر  المجموعة إلى الدالة <code>keySelector:</code><syntaxhighlight lang="kotlin">
    destination: M,
inline fun <T, K, V> Iterable<T>.associateBy(
    keySelector: (T) -> K
):
</syntaxhighlight>في حال استدعاء الدالة <code>associateByTo()‎</code>عبر  مجموعة (<code>[[Kotlin/collections|Collection]]</code>) فستعيد قاموسًا (map) يحتوي ناتج تمرير عناصر  المجموعة (<code>[[Kotlin/collections|Collection]]</code>) إلى الدالة <code>valueTransform</code> مُفهرسة بناتج تمرير عناصر  المجموعة إلى الدالة <code>keySelector:</code><syntaxhighlight lang="kotlin">
inline fun <T, K, V, M : MutableMap<in K, in V>> Iterable<T>.associateByTo(
    destination: M,
     keySelector: (T) -> K,  
     keySelector: (T) -> K,  
     valueTransform: (T) -> V
     valueTransform: (T) -> V
): Map<K, V>
): M
</syntaxhighlight>
</syntaxhighlight>يُلاحَظ وجود الكلمة المفتاحية <code>inline</code> للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]].


==القيم المعادة==
==القيم المعادة==
قاموس. (انظر شرح الدالة أعلاه لمزيد من التفاصيل)
قاموس. (انظر شرح الدالة أعلاه لمزيد من التفاصيل)
==أمثلة==
==أمثلة==
===استخدام الدالة <code>()associateBy</code> مع اللوائح بتمرير دالة واحدة===
===استخدام الدالة <code>()</code>associateByToTo مع اللوائح بتمرير دالة واحدة===
تعرف الشيفرة الآتية لائحة باسم <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>()</code>associateByToTo ثم تطبع الناتج:<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
     val list = listOf('a','b','c')
     val myList = listOf(1,2,3,4)
     val upper: (Char) -> Char = {it.toUpperCase()}
     val map = mutableMapOf<Int, Int>()
     val map = list.associateBy(upper)
    val func: (Int) -> Int = {it*4}
     println(map) // {A=a, B=b, C=c}
 
     myList.associateByTo(map,func)
 
     println(map) // {4=1, 8=2, 12=3, 16=4}
}
}
</syntaxhighlight>
</syntaxhighlight>
===استخدام الدالة <code>()associateBy</code> مع اللوائح بتمرير دالتين===
===استخدام الدالة <code>()</code>associateByToTo مع اللوائح بتمرير دالتين===
تعرف الشيفرة الآتية لائحة باسم <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>()multr</code> (التي تحول الحروف إلى عدد) إلى<code>()</code>associateByToTo ثم تطبع الناتج:<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
     val list = listOf('a','b','c')
     val myList = listOf(1,2,3,4)
     val upper: (Char) -> Char = {it.toUpperCase()}
     val map = mutableMapOf<Int, Int>()
     val mult: (Char) -> Int = {it.toInt()}
    val func: (Int) -> Int = {it*4}
     val map = list.associateBy(upper, mult)
     val func2: (Int) -> Int = {it + 4}
     println(map) // {A=97, B=98, C=99}
 
     myList.associateByTo(map,func,func2)
 
     println(map) // {4=5, 8=6, 12=7, 16=8}
}
}
</syntaxhighlight>
</syntaxhighlight>

مراجعة 11:28، 11 مايو 2018

تعيد الدالة associateByTo()‎ قاموسًا (map) يحتوي ناتج تمرير عناصر المصفوفة أو المجموعة (Collection) إلى الدالة valueTransform مُفهرسة بناتج تمرير عناصر المصفوفة أو المجموعة إلى الدالة keySelector.

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

القاموس المُعاد يحافظ على نفس ترتيب التكرار الخاص بالمصفوفة أو المجموعة الأصلية.

البنية العامة

في حال استدعاء الدالة associateByTo()‎عبر مصفوفة فستعيد قاموسًا (map) يحتوي عناصر المصفوفة مُفهرسة بناتج تمرير عناصر المصفوفة إلى الدالة keySelector:

inline fun <T, K, M : MutableMap<in K, in T>> Array<out T>.associateByTo(
    destination: M, 
    keySelector: (T) -> K
): M 
inline fun <K, M : MutableMap<in K, in Byte>> ByteArray.associateByTo(
    destination: M, 
    keySelector: (Byte) -> K
): M 
inline fun <K, M : MutableMap<in K, in Short>> ShortArray.associateByTo(
    destination: M, 
    keySelector: (Short) -> K
): M 
inline fun <K, M : MutableMap<in K, in Int>> IntArray.associateByTo(
    destination: M, 
    keySelector: (Int) -> K
): M 
inline fun <K, M : MutableMap<in K, in Long>> LongArray.associateByTo(
    destination: M, 
    keySelector: (Long) -> K
): M 
inline fun <K, M : MutableMap<in K, in Float>> FloatArray.associateByTo(
    destination: M, 
    keySelector: (Float) -> K
): M 
inline fun <K, M : MutableMap<in K, in Double>> DoubleArray.associateByTo(
    destination: M, 
    keySelector: (Double) -> K
): M 
inline fun <K, M : MutableMap<in K, in Boolean>> BooleanArray.associateByTo(
    destination: M, 
    keySelector: (Boolean) -> K
): M 
inline fun <K, M : MutableMap<in K, in Char>> CharArray.associateByTo(
    destination: M, 
    keySelector: (Char) -> K
): M

في حال استدعاء الدالة associateByTo()‎عبر مصفوفة فستعيد قاموسًا (map) يحتوي ناتج تمرير عناصر المصفوفة إلى الدالة valueTransform مُفهرسة بناتج تمرير عناصر المصفوفة إلى الدالة keySelector:

inline fun <T, K, V, M : MutableMap<in K, in V>> Array<out T>.associateByTo(
    destination: M, 
    keySelector: (T) -> K, 
    valueTransform: (T) -> V
): M 
inline fun <K, V, M : MutableMap<in K, in V>> ByteArray.associateByTo(
    destination: M, 
    keySelector: (Byte) -> K, 
    valueTransform: (Byte) -> V
): M 
inline fun <K, V, M : MutableMap<in K, in V>> ShortArray.associateByTo(
    destination: M, 
    keySelector: (Short) -> K, 
    valueTransform: (Short) -> V
): M 
inline fun <K, V, M : MutableMap<in K, in V>> IntArray.associateByTo(
    destination: M, 
    keySelector: (Int) -> K, 
    valueTransform: (Int) -> V
): M 
inline fun <K, V, M : MutableMap<in K, in V>> LongArray.associateByTo(
    destination: M, 
    keySelector: (Long) -> K, 
    valueTransform: (Long) -> V
): M 
inline fun <K, V, M : MutableMap<in K, in V>> FloatArray.associateByTo(
    destination: M, 
    keySelector: (Float) -> K, 
    valueTransform: (Float) -> V
): M 
inline fun <K, V, M : MutableMap<in K, in V>> DoubleArray.associateByTo(
    destination: M, 
    keySelector: (Double) -> K, 
    valueTransform: (Double) -> V
): M 
inline fun <K, V, M : MutableMap<in K, in V>> BooleanArray.associateByTo(
    destination: M, 
    keySelector: (Boolean) -> K, 
    valueTransform: (Boolean) -> V
): M 
inline fun <K, V, M : MutableMap<in K, in V>> CharArray.associateByTo(
    destination: M, 
    keySelector: (Char) -> K, 
    valueTransform: (Char) -> V
): M

في حال استدعاء الدالة associateByTo()‎عبر مجموعة (Collection) فستعيد قاموسًا (map) يحتوي عناصر المجموعة مُفهرسة بناتج تمرير عناصر المجموعة إلى الدالة keySelector:

inline fun <T, K, M : MutableMap<in K, in T>> Iterable<T>.associateByTo(
    destination: M, 
    keySelector: (T) -> K
):

في حال استدعاء الدالة associateByTo()‎عبر مجموعة (Collection) فستعيد قاموسًا (map) يحتوي ناتج تمرير عناصر المجموعة (Collection) إلى الدالة valueTransform مُفهرسة بناتج تمرير عناصر المجموعة إلى الدالة keySelector:

inline fun <T, K, V, M : MutableMap<in K, in V>> Iterable<T>.associateByTo(
    destination: M, 
    keySelector: (T) -> K, 
    valueTransform: (T) -> V
): M

يُلاحَظ وجود الكلمة المفتاحية inline للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع توثيق الدوال المباشرة (inline functions).

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

قاموس. (انظر شرح الدالة أعلاه لمزيد من التفاصيل)

أمثلة

استخدام الدالة ()associateByToTo مع اللوائح بتمرير دالة واحدة

تعرف الشيفرة الآتية لائحة باسم list مكونة من ثلاثة أحرف باستخدام الدالة ()listOf، ثم تنشئ قاموسًا باسم map بتمرير الدالة ()upper (التي تحول الحروف إلى الحالة UpperCase) إلى()associateByToTo ثم تطبع الناتج:

fun main(args: Array<String>) {
    val myList = listOf(1,2,3,4)
    val map = mutableMapOf<Int, Int>()
    val func: (Int) -> Int = {it*4}

    myList.associateByTo(map,func)

    println(map) // {4=1, 8=2, 12=3, 16=4}
}

استخدام الدالة ()associateByToTo مع اللوائح بتمرير دالتين

تعرف الشيفرة الآتية لائحة باسم list مكونة من ثلاثة أحرف باستخدام الدالة ()listOf، ثم تنشئ قاموسًا باسم map بتمرير الدالة ()upper (التي تحول الحروف إلى الحالة UpperCase) والدالة()multr (التي تحول الحروف إلى عدد) إلى()associateByToTo ثم تطبع الناتج:

fun main(args: Array<String>) {
    val myList = listOf(1,2,3,4)
    val map = mutableMapOf<Int, Int>()
    val func: (Int) -> Int = {it*4}
    val func2: (Int) -> Int = {it + 4}

    myList.associateByTo(map,func,func2)

    println(map) // {4=5, 8=6, 12=7, 16=8}
}

انظر أيضًا

  • associate()‎: تعيد قاموسًا (map).
  • asList()‎: تعيد لائحة والتي تُغلّف المصفوفة الاصلية.
  • asIterable()‎: تُنشئ نسخة تكرارية (Iterable instance) والتي تُغلّف المصفوفة الاصلية وتعيد عناصرها عندما تُستخدم في حلقات التكرار (مثلfor).

مصادر