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

من موسوعة حسوب
لا ملخص تعديل
ط مراجعة وتدقيق.
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة <code>groupByTo()‎</code> في لغة Kotlin}}</noinclude>
<noinclude>{{DISPLAYTITLE: الدالة <code>groupByTo()‎</code> في Kotlin}}</noinclude>
يخت
تشبه الدالة <code>groupByTo()‎</code> الدالة <code>[[Kotlin/collections/groupBy|groupBy()‎]]</code> في جميع النواحي باستثناء أنَّها تضيف الناتج المعاد إلى المعامل الممرَّر إليها.
 
تجمّع الدالة<code>groupByTo()‎</code> عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت عبرها وتضيفها إلى [[Kotlin/collections/Map|القاموس]].المُمرّر  <code>destination</code> حيث مفاتيحه تعيدها  الدالة الممرّرة <code>keySelector()‎</code>  مُطبّقة على كل عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]]، وقيمُه [[Kotlin/collections/List|لوائح]] تضم العناصر المقابلة، وفي حال تمرير معامل ثالث <code>valueTransform</code> فإنّ القيم ستكون [[Kotlin/collections/List|لوائح]]  تضم ناتج تطبيق الدالة <code>valueTransform</code> على العناصر المقابلة . ثم تعيد القاموس<code>destination.</code>
==البنية العامة==
==البنية العامة==
<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, M : MutableMap<in K, MutableList<T>>> Array<out T>.groupByTo(
inline fun <T, K, M : MutableMap<in K, MutableList<T>>> Array<out T>.groupByTo(
     destination: M,  
     destination: M,  
سطر 42: سطر 40:
): M  
): M  


</syntaxhighlight>في حال استدعاء الدالة<code>groupByTo()‎</code> على [[Kotlin/Array|المصفوفات]] مع تمرير معاملين <code>destination</code> و<code>keySelector</code> فإنّها تُجمّع عناصر [[Kotlin/Array|المصفوفة]] الأصلية وتضيفها إلى [[Kotlin/collections/Map|القاموس]].المُمرّر  <code>destination</code> حيث مفاتيحه تعيدها الدالة الممرّرة <code>keySelector()‎</code> مُطبّقة على كل عناصر [[Kotlin/Array|المصفوفة]] وقيمه [[Kotlin/collections/List|لوائح]] تضم العناصر المقابلة. ثم تعيد القاموس<code>destination.</code><syntaxhighlight lang="kotlin">
inline fun <T, K, M : MutableMap<in K, MutableList<T>>> Iterable<T>.groupByTo(
    destination: M,
    keySelector: (T) -> K
): M (source)
</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(
inline fun <T, K, V, M : MutableMap<in K, MutableList<V>>> Array<out T>.groupByTo(
     destination: M,  
     destination: M,  
سطر 89: سطر 91:
): M  
): M  


</syntaxhighlight>في حال استدعاء الدالة<code>groupByTo()‎</code> على [[Kotlin/Array|المصفوفات]] مع تمرير ثلاث معاملات <code>destination</code> و <code>valueTransform</code> و <code>keySelector</code> فإنّها تُجمّع العناصر المعادة من قبل الدالة  <code>valueTransform()‎</code> مُطبّقة على كل عناصر [[Kotlin/Array|المصفوفة]] وتربطها بالمفتاح الذي تعيده الدالة<code>keySelector()‎</code> مطبقة على على عناصر [[Kotlin/Array|المصفوفة]] وتضيفها إلى [[Kotlin/collections/Map|القاموس]] المُمرّر  <code>destination</code> حيث كل مفتاح مرتبط [[Kotlin/collections/List|بلائحة]] العناصر المقابلة. ثم تعيد [[Kotlin/collections/Map|القاموس]] <code>destination.</code><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>groupByTo()‎</code> على [[Kotlin/collections|المجموعات]] مع تمرير معاملين <code>destination</code> و<code>keySelector</code> فإنّها تُجمّع عناصر  [[Kotlin/collections|المجموعة]] الأصلية وتضيفها إلى [[Kotlin/collections/Map|القاموس]].المُمرّر  <code>destination</code> حيث مفاتيحه تعيدها الدالة الممرّرة <code>keySelector()‎</code>  مُطبّقة على كل عناصر  [[Kotlin/collections|المجموعة]] وقيمه [[Kotlin/collections/List|لوائح]] تضم العناصر المقابلة. ثم تعيد القاموس<code>destination.</code><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>groupByTo()‎</code> على [[Kotlin/collections|المجموعات]] مع تمرير ثلاث معاملات <code>destination</code> و <code>valueTransform</code> و <code>keySelector</code> فإنّها تُجمّع العناصر المعادة من قبل الدالة  <code>valueTransform()‎</code> مُطبّقة على كل عناصر  [[Kotlin/collections|المجموعة]] وتربطها بالمفتاح الذي تعيده الدالة<code>keySelector()‎</code> مطبقة على على عناصر  [[Kotlin/collections|المجموعة]] وتضيفها إلى [[Kotlin/collections/Map|القاموس]] المُمرّر  <code>destination</code> حيث كل مفتاح مرتبط [[Kotlin/collections/List|بلائحة]] العناصر المقابلة. ثم تعيد [[Kotlin/collections/Map|القاموس]] <code>destination</code>.
</syntaxhighlight>وجود الكلمة المفتاحية <code>inline</code> يدل على أنَّ هذه الدالة مباشرة (للمزيد من التفاصيل، راجع صفحة <nowiki/>[[Kotlin/inline functions|الدوال المباشرة (inline functions)]]).
 
يُلاحَظ وجود الكلمة المفتاحية <code>inline</code> للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]].
==القيم المٌعادة==
==القيم المٌعادة==
[[Kotlin/collections/Map|القاموس]] <code>destination</code> المُمرّر إلى الدالة<code>()groupByTo</code>.
يُعاد المعامل <code>destination</code> المعطى بعد إضافة الخريطة الناتجة عن تجميع عناصر المصفوفة أو المجموعة المعطاة في مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من العناصر المقابلة.
==أمثلة==
==أمثلة==
===استخدام الدالة <code>()groupByTo</code> مع المصفوفات مع تمرير معاملين===
===استخدام الدالة <code>()groupByTo</code> مع تمرير معاملين===
تعرف الشيفرة الآتية <nowiki/>[[Kotlin/Array|مصفوفة]] باسم <code>array</code> مكونة من ست [[Kotlin/collections/String|سلاسل نصية]] باستخدام الدالة <code>()arrayOf</code>، ثم تُنشئ  [[Kotlin/collections/Map|قاموسًا]] فارغًا باسم <code>map</code> باستخدام الدالة <code>()mutableMapOf</code>، ثم تستخدم الدالة <code>()groupByTo</code> على <code>array</code> بتمرير [[Kotlin/collections/Map|القاموس]] <code>map</code> و دالة تعيد طول [[Kotlin/collections/String|السلسلة النصية]] المُمرّرة، ثم تطبع [[Kotlin/collections/Map|القاموس]] <code>map</code>:<syntaxhighlight lang="kotlin">
تنشئ الشيفرة الآتية <nowiki/>[[Kotlin/Array|مصفوفة]] باسم <code>array</code> باستخدام الدالة <code>()arrayOf</code>، وخريطة فارغة باسم <code>map</code> باستخدام الدالة <code>()mutableMapOf</code> ثم تستخدم الدالة <code>()groupByTo</code> لتجميع عناصر تلك المصفوفة بحسب طول (عدد محارف) كل عنصر:<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()
    val map: MutableMap<Int, MutableList<String>> = mutableMapOf()
      
 
array.groupByTo ( map, { it.length })
     array.groupByTo(map) { it.length }
      
 
print(map) // {1=[a], 3=[abc, def], 2=[ab], 4=[avde, abcd]}
     print(map) // {1=[a], 3=[abc, def], 2=[ab], 4=[avde, abcd]}
}
}
</syntaxhighlight>
</syntaxhighlight>
===استخدام الدالة <code>()groupByTo</code> مع المصفوفات مع تمرير ثلاث معاملات===
===استخدام الدالة <code>()groupByTo</code> مع تمرير ثلاثة معاملات===
تعرف الشيفرة الآتية <nowiki/>[[Kotlin/Array|مصفوفة]] باسم <code>array</code> مكونة من ست [[Kotlin/collections/String|سلاسل نصية]] باستخدام الدالة <code>()arrayOf</code>، ثم تُنشئ  [[Kotlin/collections/Map|قاموسًا]] فارغًا باسم <code>map</code> باستخدام الدالة <code>()mutableMapOf</code>، ثم تستدعي الدالة <code>()groupByTo</code> على <code>array</code> بتمرير [[Kotlin/collections/Map|القاموس]] <code>map</code> و دالة تعيد طول [[Kotlin/collections/String|السلسلة النصية]] المُمرّرة ودالة تحوّل [[Kotlin/collections/String|السلاسل النصية]] إلى [[Kotlin/collections/String|سلاسل نصية]] ذات حروف كبيرة ، ثم تطبع [[Kotlin/collections/Map|القاموس]] <code>map</code>:<syntaxhighlight lang="kotlin">
تنشئ الشيفرة الآتية قائمة باسم <code>nameToTeam</code> باستخدام الدالة <code>()listOf</code> ثمَّ تستعمل الدالة <code>()groupByTo</code> لتجميع عناصر تلك القائمة بحسب اسم ووظيفة كل شخص وإضافتة الناتج إلى الخريطة المنشأة آنذاك:<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 map: MutableMap<Int, MutableList<String>> = mutableMapOf()
    val namesByTeam = nameToTeam.groupBy({ it.second }, { it.first })
   
     println(namesByTeam) // {تسويق=[جميل, محمد], مبيعات=[أحمد]}
array.groupByTo ( map, { it.length }, {it.toUpperCase()})
 
      
    val mutableNamesByTeam = nameToTeam.groupByTo(HashMap(), { it.second }, { it.first })
print(map) // {1=[A], 3=[ABC, DEF], 2=[AB], 4=[AVDE, ABCD]}
    // تضيف الناتج groupByTo نجد استعمال الدالتين يعطي نفس النتجية باستثناء أن الدالة 
    // mutable map إلى خريطة متغيرة
    println("${mutableNamesByTeam == namesByTeam}") // true
}
}
</syntaxhighlight>
</syntaxhighlight>
==انظر أيضًا==
==انظر أيضًا==
<code>[[Kotlin/collections/groupByTo|groupBy()]]</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]
* [https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/group-by-to.html صفحة الدالة groupByTo()‎ في التوثيق الرسمي للمكتبة القياسية في لغة Kotlin]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin Functions]]
[[تصنيف:Kotlin Functions]]

مراجعة 05:59، 24 يوليو 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 (source)

أمَّا إن مرِّر إلى الدالة 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 المعطى بعد إضافة الخريطة الناتجة عن تجميع عناصر المصفوفة أو المجموعة المعطاة في مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من العناصر المقابلة.

أمثلة

استخدام الدالة ()groupByTo مع تمرير معاملين

تنشئ الشيفرة الآتية مصفوفة باسم array باستخدام الدالة ()arrayOf، وخريطة فارغة باسم map باستخدام الدالة ()mutableMapOf ثم تستخدم الدالة ()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 مع تمرير ثلاثة معاملات

تنشئ الشيفرة الآتية قائمة باسم nameToTeam باستخدام الدالة ()listOf ثمَّ تستعمل الدالة ()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()‎: تجمع ناتج تطبيق عملية معينة على قيمة كل عنصر من عناصر المصفوفة أو المجموعة (بدءًا من اليمين إلى اليسار) المستدعاة معها وفهرس ذلك العنصر بشكل تراكمي بالإضافة إلى القيمة الأولية إن أعطيت.  

مصادر