الدالة reduce()
في Kotlin
تُراكِم الدالة reduce()
قيمة عنصر بدءًا من العنصر الأول عبر تطبيق عملية معينة من يسار العناصر المعطاة إلى يمينها على القيمة المتراكمة الحالية وعلى العنصر التالي ثم تُعيد قيمة العنصر النهائي الناتج.
البنية العامة
inline fun <S, T : S> Array<out T>.reduce(
operation: (acc: S, T) -> S
): S
inline fun ByteArray.reduce(
operation: (acc: Byte, Byte) -> Byte
): Byte
inline fun ShortArray.reduce(
operation: (acc: Short, Short) -> Short
): Short
inline fun IntArray.reduce(
operation: (acc: Int, Int) -> Int
): Int
inline fun LongArray.reduce(
operation: (acc: Long, Long) -> Long
): Long
inline fun FloatArray.reduce(
operation: (acc: Float, Float) -> Float
): Float
inline fun DoubleArray.reduce(
operation: (acc: Double, Double) -> Double
): Double
inline fun BooleanArray.reduce(
operation: (acc: Boolean, Boolean) -> Boolean
): Boolean
inline fun CharArray.reduce(
operation: (acc: Char, Char) -> Char
): Char
inline fun <S, T : S> Iterable<T>.reduce(
operation: (acc: S, T) -> S
): S
تُراكِم الدالة reduce()
القيم بدءًا من العنصر الأول ثمَّ تطبّق العملية operation
من اليسار إلى اليمين على القيمة المُتراكمة الراهنة وعلى العنصر التالي في المصفوفة أو المجموعة التي استُدعيت معها وتُعيد القيمة النهائية.
inline fun <S, T : S, K> Grouping<T, K>.reduce(
operation: (key: K, accumulator: S, element: T) -> S
): Map<K, S>
بيئة التشغيل: Kotlin 1.1.
تُجمّع الدالة reduce()
القيم من المصدر Grouping
بحسب المفاتيح (keys) ثمَّ تطبّق العملية operation
على عناصر كل مجموعة (group) بشكل متتابع بدءًا بالعنصر الثاني من المجموعة (group)، إذ تُمرّر قيمة التراكم الراهنة والعنصر الراهن كوسيطين (arguments) ويخزّن الناتج في خريطة جديد. تعدُّ القيمة الأولية المُمرّرة إلى المراكم accumulator
هي العنصر الأول في المجموعة (group).
تعيد الدالة reduce()
خريطةً تربط بين مفاتيح كل مجموعة (group) مع نتيجة تراكم عناصرها.
وجود الكلمة المفتاحية inline
يدل على أنَّ هذه الدالة مباشرة (للمزيد من التفاصيل، راجع صفحة الدوال المباشرة (inline functions)).
المعاملات
operation
دالة يراد تطبيقها على كل عنصر من عناصر الكائن المعطاة. يمرر إليها القيمة المتراكمة الحالية (التي تمثل عنصرًا) وقيمة العنصر الحالي الذي ستطبق عليه هذه الدالة ثم تحسب قيمة العنصر المتراكم التالي.
القيم المعادة
يعاد العنصر الذي يمثل القيمة النهائية الناتجة عن تطبيق العملية operation
بشكل تراكمي من اليسار إلى اليمين على كل عنصر من عناصر الكائن المعطى.
أمثلة
استعمال الدالة ()reduce
لتجميع أعداد موجودة في مصفوفة:
fun main(args: Array<String>) {
val array = arrayOf(1,2,3,4,5,6)
val acc = array.reduce { sum, element -> sum + element }
print(acc) // 21
}
انظر أيضًا
- الدالة
reduceRight()
: تجمع بشكل تراكمي ناتج تطبيق عملية معيَّنة على قيمة كل عنصر من عناصر المصفوفة أو المجموعة (بدءًا من اليمين إلى اليسار) المستدعاة معها والقيمة التراكمية الحالية. - الدالة
reduceIndexed()
: ناتج تطبيق عملية معينة على قيمة كل عنصر من عناصر المصفوفة أو المجموعة (بدءًا من اليسار إلى اليمين) المستدعاة معها وفهرس ذلك العنصر بشكل تراكمي والقيمة المجمَّعة الحالية. - الدالة
reduceRightIndexed()
: تجمع الناتج التراكمي لتطبيق عملية معينة على قيمة كل عنصر من عناصر المصفوفة أو المجموعة (بدءًا من اليمين إلى اليسار) المستدعاة معها وفهرس ذلك العنصر والقيمة المجمَّعة الحالية. - الدالة
groupBy()
: تجمِّع عناصر المصفوفة أو المجموعة التي استُدعيت معها في مجموعات، إذ تطبق دالة محدَّدة على كل عنصر ثمَّ تعاد خريطة تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من العناصر المقابلة. - الدالة
fold()
تراكميًّا ناتج تطبيق عملية معينة على قيمة كل عنصر من عناصر الكائن المستدعى معها والقيمة التراكمية الحالية بالإضافة إلى قيمة أولية إن أعطيت، ويختلف سلوكها بحسب نوع الكائنات المستدعاة معها والمعاملات المُمرّرة إليها