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

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: الدالة <code>groupByTo()‎</code> في لغة Kotlin}}</noinclude> تعيد الدالة<code>groupByTo()‎</code> Kotlin/collection...'
 
طلا ملخص تعديل
 
(7 مراجعات متوسطة بواسطة 3 مستخدمين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة <code>groupByTo()‎</code> في لغة Kotlin}}</noinclude>
<noinclude>{{DISPLAYTITLE: الدالة <code>groupByTo()‎</code> في Kotlin}}</noinclude>
تعيد الدالة<code>groupByTo()‎</code> [[Kotlin/collections/Map|قاموسًا]] يُجمّع عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت عبرها حيث مفاتيحه تعيدها الدالة المُمرّرة <code>keySelector</code> وقيمه لوائحُ تضم عناصر  [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] (أو ناتج تمرير عناصر  [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] على الدالة <code>valueTransform</code> في حال تمريرها).
تشبه الدالة <code>groupByTo()‎</code> الدالة <code>[[Kotlin/collections/groupBy|groupBy()‎]]</code> في جميع النواحي باستثناء أنَّها تضيف الناتج المعاد إلى المعامل الممرَّر إليها.
 
القاموس المُعاد يحافظ على على ترتيب التكرار (entry iteration order) للمفاتيح الناتجة عن [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] الأصلية.
==البنية العامة==
==البنية العامة==
<syntaxhighlight lang="kotlin">
إن مُرِّر إلى الدالة <code>groupBy()‎</code> المعامل <code>destination</code> والمعامل <code>keySelector</code> فقط، فستُجمّع عناصر [[Kotlin/Array|المصفوفة]] أو المجموعة المعطاة بحسب المفتاح الذي تعيده الدالة <code>keySelector()‎</code> المطبقة على كل عنصر من تلك العناصر ثمَّ تضيف الخريطة الناتجة التي تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من العناصر المقابلة إلى المعامل <code>destination</code>.<syntaxhighlight lang="kotlin">
inline fun <T, K> Array<out T>.groupBy(
inline fun <T, K, M : MutableMap<in K, MutableList<T>>> Array<out T>.groupByTo(
    destination: M,
     keySelector: (T) -> K
     keySelector: (T) -> K
): Map<K, List<T>>
): M
inline fun <K> ByteArray.groupBy(
inline fun <K, M : MutableMap<in K, MutableList<Byte>>> ByteArray.groupByTo(
    destination: M,
     keySelector: (Byte) -> K
     keySelector: (Byte) -> K
): Map<K, List<Byte>>  
): M
inline fun <K> ShortArray.groupBy(
inline fun <K, M : MutableMap<in K, MutableList<Short>>> ShortArray.groupByTo(
    destination: M,
     keySelector: (Short) -> K
     keySelector: (Short) -> K
): Map<K, List<Short>>  
): M
inline fun <K> IntArray.groupBy(
inline fun <K, M : MutableMap<in K, MutableList<Int>>> IntArray.groupByTo(
    destination: M,
     keySelector: (Int) -> K
     keySelector: (Int) -> K
): Map<K, List<Int>>  
): M
inline fun <K> LongArray.groupBy(
inline fun <K, M : MutableMap<in K, MutableList<Long>>> LongArray.groupByTo(
    destination: M,
     keySelector: (Long) -> K
     keySelector: (Long) -> K
): Map<K, List<Long>>  
): M
inline fun <K> FloatArray.groupBy(
inline fun <K, M : MutableMap<in K, MutableList<Float>>> FloatArray.groupByTo(
    destination: M,
     keySelector: (Float) -> K
     keySelector: (Float) -> K
): Map<K, List<Float>>  
): M
inline fun <K> DoubleArray.groupBy(
inline fun <K, M : MutableMap<in K, MutableList<Double>>> DoubleArray.groupByTo(
    destination: M,
     keySelector: (Double) -> K
     keySelector: (Double) -> K
): Map<K, List<Double>>  
): M
inline fun <K> BooleanArray.groupBy(
inline fun <K, M : MutableMap<in K, MutableList<Boolean>>> BooleanArray.groupByTo(
    destination: M,
     keySelector: (Boolean) -> K
     keySelector: (Boolean) -> K
): Map<K, List<Boolean>>  
): M
inline fun <K> CharArray.groupBy(
inline fun <K, M : MutableMap<in K, MutableList<Char>>> CharArray.groupByTo(
    destination: M,
     keySelector: (Char) -> K
     keySelector: (Char) -> K
): Map<K, List<Char>>
): M


</syntaxhighlight>في حال استدعاء الدالة<code>groupBy()‎</code> على [[Kotlin/Array|المصفوفات]] مع تمرير معامل واحد <code>keySelector</code> فإنّها تُجمّع عناصر [[Kotlin/Array|المصفوفة]] الأصلية في [[Kotlin/collections/Map|قاموس]].حيث مفاتيحه تعيدها الدالة الممرّرة <code>keySelector()‎</code> مُطبّقة على كل عناصر [[Kotlin/Array|المصفوفة]] وقيمه [[Kotlin/collections/List|لوائح]] تضم العناصر المقابلة.<syntaxhighlight lang="kotlin">
inline fun <T, K, M : MutableMap<in K, MutableList<T>>> Iterable<T>.groupByTo(
inline fun <T, K, V> Array<out T>.groupBy(
    destination: M,
    keySelector: (T) -> K
): M
</syntaxhighlight>أمَّا إن مرِّر إلى الدالة <code>groupBy()‎</code> المعاملات <code>destination</code> و <code>valueTransform</code> و <code>keySelector</code>، فستُجمّع عناصر المصفوفة أو المجموعة المعطاة بحسب القيم التي تعيدها الدالة <code>valueTransform()‎</code> المطبقة على كل عنصر من تلك العناصر وبحسب المفتاح الذي تعيده الدالة <code>keySelector()‎</code> المطبقة على العنصر ثمَّ تضيف الخريطة الناتجة التي تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من العناصر المقابلة إلى المعامل <code>destination</code>.<syntaxhighlight lang="kotlin">
inline fun <T, K, V, M : MutableMap<in K, MutableList<V>>> Array<out T>.groupByTo(
    destination: M,
     keySelector: (T) -> K,  
     keySelector: (T) -> K,  
     valueTransform: (T) -> V
     valueTransform: (T) -> V
): Map<K, List<V>>
): M
inline fun <K, V> ByteArray.groupBy(
inline fun <K, V, M : MutableMap<in K, MutableList<V>>> ByteArray.groupByTo(
    destination: M,
     keySelector: (Byte) -> K,  
     keySelector: (Byte) -> K,  
     valueTransform: (Byte) -> V
     valueTransform: (Byte) -> V
): Map<K, List<V>>
): M
inline fun <K, V> ShortArray.groupBy(
inline fun <K, V, M : MutableMap<in K, MutableList<V>>> ShortArray.groupByTo(
    destination: M,
     keySelector: (Short) -> K,  
     keySelector: (Short) -> K,  
     valueTransform: (Short) -> V
     valueTransform: (Short) -> V
): Map<K, List<V>>
): M
inline fun <K, V> IntArray.groupBy(
inline fun <K, V, M : MutableMap<in K, MutableList<V>>> IntArray.groupByTo(
    destination: M,
     keySelector: (Int) -> K,  
     keySelector: (Int) -> K,  
     valueTransform: (Int) -> V
     valueTransform: (Int) -> V
): Map<K, List<V>>
): M
inline fun <K, V> LongArray.groupBy(
inline fun <K, V, M : MutableMap<in K, MutableList<V>>> LongArray.groupByTo(
    destination: M,
     keySelector: (Long) -> K,  
     keySelector: (Long) -> K,  
     valueTransform: (Long) -> V
     valueTransform: (Long) -> V
): Map<K, List<V>>
): M
inline fun <K, V> FloatArray.groupBy(
inline fun <K, V, M : MutableMap<in K, MutableList<V>>> FloatArray.groupByTo(
    destination: M,
     keySelector: (Float) -> K,  
     keySelector: (Float) -> K,  
     valueTransform: (Float) -> V
     valueTransform: (Float) -> V
): Map<K, List<V>>
): M
inline fun <K, V> DoubleArray.groupBy(
inline fun <K, V, M : MutableMap<in K, MutableList<V>>> DoubleArray.groupByTo(
    destination: M,
     keySelector: (Double) -> K,  
     keySelector: (Double) -> K,  
     valueTransform: (Double) -> V
     valueTransform: (Double) -> V
): Map<K, List<V>>
): M
inline fun <K, V> BooleanArray.groupBy(
inline fun <K, V, M : MutableMap<in K, MutableList<V>>> BooleanArray.groupByTo(
    destination: M,
     keySelector: (Boolean) -> K,  
     keySelector: (Boolean) -> K,  
     valueTransform: (Boolean) -> V
     valueTransform: (Boolean) -> V
): Map<K, List<V>>
): M
inline fun <K, V> CharArray.groupBy(
inline fun <K, V, M : MutableMap<in K, MutableList<V>>> CharArray.groupByTo(
    destination: M,
     keySelector: (Char) -> K,  
     keySelector: (Char) -> K,  
     valueTransform: (Char) -> V
     valueTransform: (Char) -> V
): Map<K, List<V>>
): M


</syntaxhighlight>في حال استدعاء الدالة<code>groupBy()‎</code> على [[Kotlin/Array|المصفوفات]] مع تمرير معاملين <code>valueTransform</code> و <code>keySelector</code> فإنّها تُجمّع العناصر المعادة من قبل الدالة  <code>valueTransform()‎</code> مُطبّقة على كل عناصر [[Kotlin/Array|المصفوفة]] وتربطها بالمفتاح الذي تعيده الدالة<code>keySelector()‎</code> مطبقة على على عناصر [[Kotlin/Array|المصفوفة]] وتعيد [[Kotlin/collections/Map|قاموسًا]] حيث كل مفتاح مرتبط [[Kotlin/collections/List|بلائحة]] العناصر المقابلة.<syntaxhighlight lang="kotlin">
inline fun <T, K, V, M : MutableMap<in K, MutableList<V>>> Iterable<T>.groupByTo(
inline fun <T, K> Iterable<T>.groupBy(
    destination: M,  
    keySelector: (T) -> K
): Map<K, List<T>>
</syntaxhighlight>في حال استدعاء الدالة<code>groupBy()‎</code> على [[Kotlin/collections|المجموعات]] مع تمرير معامل واحد <code>keySelector</code> فإنّها تُجمّع عناصر [[Kotlin/Array|المصفوفة]] الأصلية في [[Kotlin/collections/Map|قاموس]].حيث مفاتيحه تعيدها الدالة الممرّرة <code>keySelector()‎</code>  مُطبّقة على كل عناصر [[Kotlin/Array|المصفوفة]] وقيمه [[Kotlin/collections/List|لائحة]] تضم العناصر المقابلة.<syntaxhighlight lang="kotlin">
inline fun <T, K, V> Iterable<T>.groupBy(
     keySelector: (T) -> K,  
     keySelector: (T) -> K,  
     valueTransform: (T) -> V
     valueTransform: (T) -> V
): Map<K, List<V>>
): M (source)
</syntaxhighlight>في حال استدعاء الدالة<code>groupBy()‎</code> على [[Kotlin/Array|المجموعات]] مع تمرير معاملين <code>valueTransform</code> و <code>keySelector</code> فإنّها تُجمّع العناصر المعادة من قبل الدالة  <code>valueTransform()‎</code> مُطبّقة على كل عناصر [[Kotlin/Array|المصفوفة]] وتربطها بالمفتاح الذي تعيده الدالة<code>keySelector()‎</code> مطبقة على على عناصر [[Kotlin/Array|المجموعة]] وتعيد [[Kotlin/collections/Map|قاموسًا]] حيث كل مفتاح مرتبط [[Kotlin/collections/List|بلائحة]] العناصر المقابلة.
</syntaxhighlight>وجود الكلمة المفتاحية <code>inline</code> يدل على أنَّ هذه الدالة مباشرة (للمزيد من التفاصيل، راجع صفحة <nowiki/>[[Kotlin/inline functions|الدوال المباشرة (inline functions)]]).
 
== المعاملات ==
 
=== <code>destination</code> ===
خريطة من النوع <code>[[Kotlin/collections/MutableMap|MutableMap]]</code> تمثل الوجهة التي سيُضَاف الناتج فيها.
 
=== <code>keySelector</code> ===
دالةٌ تطبق على كل عنصر من عناصر المصفوفة أو المجموعة المعطاة، وتعيد المفتاح المقابل لكل محرف.
 
=== <code>valueTransform</code> ===
دالة تطبق على كل عنصر من عناصر المصفوفة أو المجموعة المعطاة، وتعيد القيمة المقابلة لكل محرف.


يُلاحَظ وجود الكلمة المفتاحية <code>inline</code> للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]].
==القيم المٌعادة==
[[Kotlin/collections/Map|قاموس]] يُجمّع عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت عبرها حيث مفاتيحه تعيدها الدالة المُمرّرة <code>keySelector</code> وقيمه لوائحُ تضم عناصر  [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] (أو ناتج تمرير عناصر  [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] على الدالة <code>valueTransform</code> في حال تمريرها).
==أمثلة==
==أمثلة==
===استخدام الدالة <code>()groupByTo</code> مع المصفوفات مع تمرير معامل واحد===
مثالٌ على استخدام الدالة <code>()groupByTo</code> مع تمرير معاملين:<syntaxhighlight lang="kotlin">
تعرف الشيفرة الآتية <nowiki/>[[Kotlin/Array|مصفوفة]] باسم <code>array</code> مكونة من ست سلاسل نصية باستخدام الدالة <code>()arrayOf</code>، ثم تستخدم الدالة <code>()groupByTo</code> على <code>array</code> بتمرير الدالة التي تعيد طول السلسلة النصية المُمرّرة، وتجمّع عناصر <code>array</code> التي لها نفس الطول في [[Kotlin/collections/Map|قاموس]]، ثم تطبع [[Kotlin/collections/Map|القاموس]]:<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
     val array = arrayOf("a", "abc", "ab", "def","avde" ,"abcd")
     val array = arrayOf("a", "abc", "ab", "def", "avde", "abcd")
    val map: MutableMap<Int, MutableList<String>> = mutableMapOf()


     print(array.groupBy { it.length } ) // {1=[a], 3=[abc, def], 2=[ab], 4=[avde, abcd]}
     array.groupByTo(map) { it.length }
 
    print(map) // {1=[a], 3=[abc, def], 2=[ab], 4=[avde, abcd]}
}
}
</syntaxhighlight>
</syntaxhighlight>مثالٌ آخر على استعمال استخدام الدالة <code>()groupByTo</code> مع تمرير ثلاثة معاملات:<syntaxhighlight lang="kotlin">
===استخدام الدالة <code>()groupByTo</code> مع المصفوفات مع تمرير مُعاملين===
تعرف الشيفرة الآتية <nowiki/>[[Kotlin/Array|مصفوفة]] باسم <code>array</code> مكونة من ست سلاسل نصية باستخدام الدالة <code>()arrayOf</code>، ثم تستخدم الدالة <code>()groupByTo</code> على <code>array</code> بتمرير دالة تعيد طول السلسلة النصية المُمرّرة ودالة تعيد المصفوفة بالحروف الكبيرة، وتجمّع عناصر <code>array</code> التي لها نفس الطول في [[Kotlin/collections/Map|قاموس]] بتحويلها إلى الحروف الكبيرة، ثم تطبع [[Kotlin/collections/Map|القاموس]]:<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
     val array = arrayOf("a", "abc", "ab", "def","avde" ,"abcd")
     val nameToTeam = listOf("جميل" to "تسويق", "أحمد" to "مبيعات", "محمد" to "تسويق")
    val namesByTeam = nameToTeam.groupBy({ it.second }, { it.first })
    println(namesByTeam) // {تسويق=[جميل, محمد], مبيعات=[أحمد]}


     print(array.groupBy( { it.length }, {it.toUpperCase()} )) // {1=[A], 3=[ABC, DEF], 2=[AB],
     val mutableNamesByTeam = nameToTeam.groupByTo(HashMap(), { it.second }, { it.first })
                                                              // 4=[AVDE, ABCD]}
    // تضيف الناتج groupByTo نجد استعمال الدالتين يعطي نفس النتجية باستثناء أن الدالة 
    // mutable map إلى خريطة متغيرة
    println("${mutableNamesByTeam == namesByTeam}") // true
}
}
</syntaxhighlight>
</syntaxhighlight>
==انظر أيضًا==
==انظر أيضًا==
<code>[[Kotlin/collections/groupByTo|groupByTo()]]</code>: تضيف إلى [[Kotlin/collections/Map|القاموس]] المُمرّر  عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت عبرها حيث مفاتيحه تعيدها الدالة المُمرّرة <code>keySelector</code> وقيمه لوائحُ تضم عناصر  [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] (أو ناتج تمرير عناصر  [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] على الدالة <code>valueTransform</code> في حال تمريرها). 
* الدالة <code>[[Kotlin/collections/groupBy|groupBy()]]</code>: تجمِّع عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت معها في مجموعات، إذ تطبق دالة محدَّدة على كل عنصر ثمَّ تعاد خريطة تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من العناصر المقابلة.
* الدالة <code>[[Kotlin/collections/groupingBy|groupingBy()‎]]</code>: تُنشئ موردًا (source) من النوع <code>Grouping</code> من [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت معها لاستخدامه لاحقًا مع عمليات التجميع (group-and-fold operations) وذلك باستخدام دالة معيَّنة لاستخلاص مفتاح من كل عنصر.
* الدالة <code>[[Kotlin/collections/foldRight|foldRight()]]</code>‎: تجمع بشكل تراكمي ناتج تطبيق عملية معيَّنة على قيمة كل عنصر من عناصر المصفوفة أو المجموعة (بدءًا من اليمين إلى اليسار) المستدعاة معها والقيمة التراكمية الحالية بالإضافة إلى القيمة الأولية إن أعطيت. 
* الدالة <code>[[Kotlin/collections/foldRightIndexed|foldRightIndexed()‎]]</code>: تجمع ناتج تطبيق عملية معينة على قيمة كل عنصر من عناصر المصفوفة أو المجموعة (بدءًا من اليمين إلى اليسار) المستدعاة معها وفهرس ذلك العنصر بشكل تراكمي بالإضافة إلى القيمة الأولية إن أعطيت.  
 
==مصادر==
==مصادر==
 
* [https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/group-by-to.html صفحة الدالة groupByTo()‎ في التوثيق الرسمي للمكتبة القياسية في لغة Kotlin]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin Functions]]
[[تصنيف:Kotlin Function]]
[[تصنيف:Kotlin Collection]]

المراجعة الحالية بتاريخ 08:12، 8 سبتمبر 2018

تشبه الدالة groupByTo()‎ الدالة groupBy()‎ في جميع النواحي باستثناء أنَّها تضيف الناتج المعاد إلى المعامل الممرَّر إليها.

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

إن مُرِّر إلى الدالة groupBy()‎ المعامل destination والمعامل keySelector فقط، فستُجمّع عناصر المصفوفة أو المجموعة المعطاة بحسب المفتاح الذي تعيده الدالة keySelector()‎ المطبقة على كل عنصر من تلك العناصر ثمَّ تضيف الخريطة الناتجة التي تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من العناصر المقابلة إلى المعامل destination.

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

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

أمَّا إن مرِّر إلى الدالة groupBy()‎ المعاملات destination و valueTransform و keySelector، فستُجمّع عناصر المصفوفة أو المجموعة المعطاة بحسب القيم التي تعيدها الدالة valueTransform()‎ المطبقة على كل عنصر من تلك العناصر وبحسب المفتاح الذي تعيده الدالة keySelector()‎ المطبقة على العنصر ثمَّ تضيف الخريطة الناتجة التي تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من العناصر المقابلة إلى المعامل destination.

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

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

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

المعاملات

destination

خريطة من النوع MutableMap تمثل الوجهة التي سيُضَاف الناتج فيها.

keySelector

دالةٌ تطبق على كل عنصر من عناصر المصفوفة أو المجموعة المعطاة، وتعيد المفتاح المقابل لكل محرف.

valueTransform

دالة تطبق على كل عنصر من عناصر المصفوفة أو المجموعة المعطاة، وتعيد القيمة المقابلة لكل محرف.

أمثلة

مثالٌ على استخدام الدالة ()groupByTo مع تمرير معاملين:

fun main(args: Array<String>) {
    val array = arrayOf("a", "abc", "ab", "def", "avde", "abcd")
    val map: MutableMap<Int, MutableList<String>> = mutableMapOf()

    array.groupByTo(map) { it.length }

    print(map) // {1=[a], 3=[abc, def], 2=[ab], 4=[avde, abcd]}
}

مثالٌ آخر على استعمال استخدام الدالة ()groupByTo مع تمرير ثلاثة معاملات:

fun main(args: Array<String>) {
    val nameToTeam = listOf("جميل" to "تسويق", "أحمد" to "مبيعات", "محمد" to "تسويق")
    val namesByTeam = nameToTeam.groupBy({ it.second }, { it.first })
    println(namesByTeam) // {تسويق=[جميل, محمد], مبيعات=[أحمد]}

    val mutableNamesByTeam = nameToTeam.groupByTo(HashMap(), { it.second }, { it.first })
    // تضيف الناتج groupByTo نجد استعمال الدالتين يعطي نفس النتجية باستثناء أن الدالة  
    // mutable map إلى خريطة متغيرة 
    println("${mutableNamesByTeam == namesByTeam}") // true
}

انظر أيضًا

  • الدالة groupBy()‎: تجمِّع عناصر المصفوفة أو المجموعة التي استُدعيت معها في مجموعات، إذ تطبق دالة محدَّدة على كل عنصر ثمَّ تعاد خريطة تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من العناصر المقابلة.
  • الدالة groupingBy()‎: تُنشئ موردًا (source) من النوع Grouping من المصفوفة أو المجموعة التي استُدعيت معها لاستخدامه لاحقًا مع عمليات التجميع (group-and-fold operations) وذلك باستخدام دالة معيَّنة لاستخلاص مفتاح من كل عنصر.
  • الدالة foldRight()‎: تجمع بشكل تراكمي ناتج تطبيق عملية معيَّنة على قيمة كل عنصر من عناصر المصفوفة أو المجموعة (بدءًا من اليمين إلى اليسار) المستدعاة معها والقيمة التراكمية الحالية بالإضافة إلى القيمة الأولية إن أعطيت. 
  • الدالة foldRightIndexed()‎: تجمع ناتج تطبيق عملية معينة على قيمة كل عنصر من عناصر المصفوفة أو المجموعة (بدءًا من اليمين إلى اليسار) المستدعاة معها وفهرس ذلك العنصر بشكل تراكمي بالإضافة إلى القيمة الأولية إن أعطيت.  

مصادر