الفرق بين المراجعتين ل"Kotlin/collections/associateBy"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: الدالة <code>associateBy()‎</code> في لغة Kotlin}}</noinclude> تُنشئ الدالة <code>associateBy()‎</code> نسخة م...')
 
ط
 
(11 مراجعة متوسطة بواسطة 3 مستخدمين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة <code>associateBy()‎</code> في لغة Kotlin}}</noinclude>
+
<noinclude>{{DISPLAYTITLE: الدالة <code>associateBy()‎</code> في Kotlin}}</noinclude>
تُنشئ الدالة <code>associateBy()‎</code> نسخة من الواجهة <code>Sequence</code> والتي تُغلّف المصفوفة الاصلية وتعيد عناصرها عندما تُستخدم في حلقات التكرار (مثل <code>[[Kotlin/control flow#.D8.AA.D8.B9.D8.A8.D9.8A.D8.B1 for|for]]</code>).
+
تعيد الدالة <code>associateBy()‎</code> خريطةً (map) مكونة من الأزواج "مفتاح/قيمة"، إذ يكون المفتاح (key) هو الناتج الذي تعيده الدالة <code>keySelector</code> الممررة إليها وتكون القيمة (value) المقابلة لذلك المفتاح هي إمَّا عناصر المصفوفة أو المجموعة المعطاة أو الناتج الذي تعيده الدالة <code>valueTransform</code> الممررة.  
 +
 
 +
 إن كان لعنصرين نفس المفتاح (key) بعد تطبيق الدالة <code>keySelector</code>، فإنَّ الأخير هو الذي سيُضاف إلى الخريطة.
 +
 
 +
تحافظ الخريطة المُعادة على نفس ترتيب التكرار الخاص بالمصفوفة أو المجموعة الأصليَّة.
 
==البنية العامة==
 
==البنية العامة==
في حال استدعاء الدالة <code>associateBy()‎</code>عبر مصفوفة فستعيد نسخة من الواجهة <code>Sequence</code> والتي تُغلّف المصفوفة التي استُدعيت عبرها وتعيد عناصرها عندما تُستخدم في حلقات التكرار (مثل <code>[[Kotlin/control flow#.D8.AA.D8.B9.D8.A8.D9.8A.D8.B1 for|for]]</code>):<syntaxhighlight lang="kotlin">
+
إن استدعيت الدالة <code>associateBy()‎</code>مع مصفوفة، فستعيد خريطةً (map) تحتوي على عناصر المصفوفة مُفهرسة بناتج تمرير هذه العناصر إلى الدالة <code>keySelector</code>:<syntaxhighlight lang="kotlin">
fun <T> Array<out T>.asSequence(): Sequence<T>  
+
inline fun <T, K> Array<out T>.associateBy(keySelector: (T) -> K): Map<K, T>
fun ByteArray.asSequence(): Sequence<Byte>  
+
inline fun <K> ByteArray.associateBy(keySelector: (Byte) -> K): Map<K, Byte>  
fun ShortArray.asSequence(): Sequence<Short>  
+
inline fun <K> ShortArray.associateBy(keySelector: (Short) -> K): Map<K, Short>  
fun IntArray.asSequence(): Sequence<Int>  
+
inline fun <K> IntArray.associateBy(keySelector: (Int) -> K): Map<K, Int>  
fun LongArray.asSequence(): Sequence<Long>  
+
inline fun <K> LongArray.associateBy(keySelector: (Long) -> K): Map<K, Long>  
fun FloatArray.asSequence(): Sequence<Float>  
+
inline fun <K> FloatArray.associateBy(keySelector: (Float) -> K): Map<K, Float>
fun DoubleArray.asSequence(): Sequence<Double>  
+
inline fun <K> DoubleArray.associateBy(keySelector: (Double) -> K): Map<K, Double>  
fun BooleanArray.asSequence(): Sequence<Boolean>  
+
inline fun <K> BooleanArray.associateBy(keySelector: (Boolean) -> K): Map<K, Boolean>
fun CharArray.asSequence(): Sequence<Char>
+
inline fun <K> CharArray.associateBy(keySelector: (Char) -> K): Map<K, Char>
</syntaxhighlight>يمكن استدعاء الدالة <code>asSequence()‎</code>عبر مجموعة ([[Kotlin/collections|Collection]]) وستعيد نسخة من الواجهة <code>Sequence</code> والتي تُغلّف المجموعة التي استُدعيت عبرها وتعيد عناصرها عندما تُستخدم في حلقات التكرار (مثل <code>[[Kotlin/control flow#.D8.AA.D8.B9.D8.A8.D9.8A.D8.B1 for|for]]</code>):<syntaxhighlight lang="kotlin">
+
</syntaxhighlight>إن استدعيت الدالة <code>associateBy()‎</code>مع مصفوفة، فستعيد خريطةً (map) تحتوي على عناصر المصفوفة مُفهرسة بناتج تمرير هذه العناصر إلى الدالة <code>keySelector</code>:<syntaxhighlight lang="kotlin">
fun <T> Iterable<T>.asSequence(): Sequence<T>  
+
inline fun <T, K, V> Array<out T>.associateBy(
</syntaxhighlight>يمكن استدعاء الدالة <code>asSequence()‎</code>عبر قاموس ([[kotln/map|Map]]) وستعيد نسخة من الواجهة <code>Sequence</code> والتي تُغلّف القاموس الذي استُدعيت عبره وتعيد مداخله (entries) عندما تُستخدم في حلقات التكرار (مثل <code>[[Kotlin/control flow#.D8.AA.D8.B9.D8.A8.D9.8A.D8.B1 for|for]]</code>):<syntaxhighlight lang="kotlin">
+
    keySelector: (T) -> K,
fun <K, V> Map<out K, V>.asSequence(): Sequence<Entry<K, V>>  
+
    valueTransform: (T) -> V
</syntaxhighlight>
+
): 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>
 +
</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>
 +
</syntaxhighlight>إن استدعيت الدالة <code>associateBy()‎</code> مع مجموعة ([[Kotlin/collections|Collection]])، فستعيد خريطةً (map) تحتوي على عناصر المجموعة مُفهرسة بالناتج المعاد من تمرير هذه العناصر إلى الدالة <code>keySelector</code>:<syntaxhighlight lang="kotlin">
 +
inline fun <T, K, V> Iterable<T>.associateBy(
 +
    keySelector: (T) -> K,  
 +
    valueTransform: (T) -> V
 +
): Map<K, V>
 +
</syntaxhighlight>وجود الكلمة المفتاحية <code>inline</code> يدل على أن هذه الدالة مباشرة (للمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]]).
 +
 
 +
== المعاملات ==
 +
 
 +
=== <code>keySelector</code> ===
 +
دالةٌ يمرر إليها كل عنصر من عناصر المصفوفة أو المجموعة المعطاة على حدة وتعيد المفتاح المقابل لذلك العنصر المراد وضعه في الخريطة.
 +
 
 +
=== <code>valueTransform</code> ===
 +
دالةٌ يمرر إليها كل عنصر من عناصر المصفوفة أو المجموعة المعطاة على حدة وتعيد القيمة المقابلة لذلك العنصر المراد وضعها في الخريطة.
 +
 
 
==القيم المعادة==
 
==القيم المعادة==
نسخة من الواجهة <code>Sequence</code>. (انظر شرح الدالة أعلاه لمزيد من التفاصيل)
+
تُعاد خريطةٌ (map) تحتوي على عناصر المصفوفة أو المجموعة المعطاة مُفهرسة بناتج تمرير هذه العناصر إلى الدالة <code>keySelector</code>.
 
==أمثلة==
 
==أمثلة==
===استخدام الدالة <code>()associateBy</code> مع المصفوفات===
+
===استخدام الدالة <code>()associateBy</code> مع القوائم بتمرير دالة واحدة===
تعرف الشيفرة الآتية مصفوفة باسم <code>array</code> مكونة من ثلاثة أحرف باستخدام الدالة <code>()arrayOf</code>، ثم تنشئ نسخة من النوع <code>Sequence</code> باسم <code>sequence</code> باستخدام الدالة <code>()asSequence</code>ثم تضم عناصر <code>sequence</code> عبر الدالة <code>[[Kotlin/collections/joinToString|joinToString()‎]]</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 array = arrayOf('a', 'b', 'c')
+
    val list = listOf('a', 'b', 'c')
val sequence = array.asSequence()
+
    val upper: (Char) -> Char = {
 
+
        it.toUpperCase()
println(sequence.joinToString()) // a, b, c
+
    }
 +
    val map = list.associateBy(upper)
 +
    println(map) // {A=a, B=b, C=c}
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
===استخدام الدالة <code>()associateBy</code> مع اللوائح===
+
===استخدام الدالة <code>()associateBy</code> مع القوائم بتمرير دالتين===
تعرف الشيفرة الآتية لائحة باسم <code>collection</code> مكونة من ثلاثة أحرف باستخدام الدالة <code>()listOf</code>، ثم تنشئ نسخة من النوع <code>Sequence</code> باسم <code>sequence</code> باستخدام الدالة <code>()asSequence</code>ثم تضم عناصر <code>sequence</code> عبر الدالة <code>[[Kotlin/collections/joinToString|joinToString()‎]]</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 collection = listOf('a', 'b', 'c')
+
    val list = listOf('a', 'b', 'c')
val sequence = collection.asSequence()
+
    val upper: (Char) -> Char = {
 
+
        it.toUpperCase()
println(sequence.joinToString()) // a, b, c
+
    }
 +
    val mult: (Char) -> Int = {
 +
        it.toInt()
 +
    }
 +
    val map = list.associateBy(upper, mult)
 +
    println(map) // {A=97, B=98, C=99}
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
==انظر أيضًا==
 
==انظر أيضًا==
*<code>[[Kotlin/collections/asList|asList()]]</code>‎: تعيد لائحة والتي تُغلّف المصفوفة الاصلية.
+
*الدالة <code>[[Kotlin/collections/associate|associate()]]</code>‎: تعيد خريطةً (map) تحوي أزواجًا من "مفتاح/قيمة" ناتجة عن تمرير عناصر المصفوفة أو المجموعة ([[Kotlin/collections|Collection]]) إلى الدالة <code>transform</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>).
  
 
==مصادر==
 
==مصادر==
<span> </span>
+
*[https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/associate-by.html صفحة الدالة associate()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
*[https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/as-sequence.html الدالة  asSequence()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
 
 
[[تصنيف:Kotlin]]
 
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin Functions]]
+
[[تصنيف: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).

مصادر