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

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: الدالة <code>associateBy()‎</code> في لغة Kotlin}}</noinclude> تُنشئ الدالة <code>associateBy()‎</code> نسخة م...')
 
سطر 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) يحتوي ناتج تمرير عناصر المصفوفة أو المجموعة (<code>[[Kotlin/collections|Collection]]</code>) إلى الدالة <code>valueTransform</code> مُفهرسة بناتج تمرير عناصر المصفوفة أو المجموعة إلى الدالة <code>keySelector</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>valueTransform</code> مُفهرسة بناتج تمرير عناصر المصفوفة إلى الدالة <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
 +
): 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>عبر مجموعة (<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>
 +
</syntaxhighlight>في حال استدعاء الدالة <code>associateBy()‎</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> Iterable<T>.associateBy(
 +
    keySelector: (T) -> K,  
 +
    valueTransform: (T) -> V
 +
): Map<K, V>
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 
==القيم المعادة==
 
==القيم المعادة==
نسخة من الواجهة <code>Sequence</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()}
 
+
    val map = list.associateBy(upper)
println(sequence.joinToString()) // a, b, c
+
    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>()multr</code> (التي تحول الحروف إلى عدد) إلى<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()}
 
+
    val mult: (Char) -> Int = {it.toInt()}
println(sequence.joinToString()) // a, b, c
+
    val map = list.associateBy(upper, mult)
 +
    println(map) // {A=97, B=98, C=99}
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
==انظر أيضًا==
 
==انظر أيضًا==
 +
*<code>[[Kotlin/collections/associateBy|associateBy()]]</code>‎: تعيد قاموسًا (map).
 
*<code>[[Kotlin/collections/asList|asList()]]</code>‎: تعيد لائحة والتي تُغلّف المصفوفة الاصلية.
 
*<code>[[Kotlin/collections/asList|asList()]]</code>‎: تعيد لائحة والتي تُغلّف المصفوفة الاصلية.
  
سطر 44: سطر 91:
  
 
==مصادر==
 
==مصادر==
<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 Functions]]

مراجعة 18:37، 10 مايو 2018

تعيد الدالة 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>

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

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

أمثلة

استخدام الدالة ()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}
}

انظر أيضًا

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

مصادر