الدالة text.groupByTo()‎ في لغة Kotlin

من موسوعة حسوب
مراجعة 17:57، 9 يوليو 2018 بواسطة محمد-بغات (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: الدالة <code>text.groupByTo()‎</code> في لغة Kotlin}}</noinclude> تعيد الدالة<code>groupByTo()‎</code> Kotlin/colle...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

تعيد الدالةgroupByTo()‎ قاموسًا يُجمّع حروف سلسلة الحروف التي استُدعيت عبرها حيث مفاتيحه تعيدها الدالة المُمرّرة keySelector وقيمه لوائحُ تضم عناصر سلسلة الحروف (أو ناتج تمرير عناصر المصفوفة أو المجموعة على الدالة valueTransform في حال تمريرها).

القاموس المُعاد يحافظ على على ترتيب التكرار (entry iteration order) للمفاتيح الناتجة عن سلسلة الحروف الأصلية.

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

inline fun <K> CharSequence.groupBy(
    keySelector: (Char) -> K
): Map<K, List<Char>>

في حال استدعاء الدالةgroupBy()‎ على سلسلة حروف مع تمرير معامل واحد keySelector فإنّها تُجمّع عناصر  سلسلة الحروف الأصلية في قاموس. حيث مفاتيحه تعيدها الدالة الممرّرة keySelector()‎ مُطبّقة على كل عناصر  سلسلة حروف وقيمه لوائح تضم العناصر المقابلة.

inline fun <K, V> CharSequence.groupBy(
    keySelector: (Char) -> K, 
    valueTransform: (Char) -> V
): Map<K, List<V>>

في حال استدعاء الدالةgroupBy()‎ على سلسلة الحروف مع تمرير معاملين valueTransform و keySelector فإنّها تُجمّع العناصر المعادة من قبل الدالة valueTransform()‎ مُطبّقة على كل عناصر سلسلة الحروف وتربطها بالمفتاح الذي تعيده الدالةkeySelector()‎ مطبقة على على عناصر سلسلة الحروف وتعيد قاموسًا حيث كل مفتاح مرتبط بلائحة العناصر المقابلة.

inline fun <T, K> Iterable<T>.groupBy(
    keySelector: (T) -> K
): Map<K, List<T>>

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

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

قاموس.

أمثلة

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

تعرِّف الشيفرة الآتية سلسلة نصية باسم str، ثمَّ تستدعي الدالة ()groupByTo عبرها مع تمرير دالة كوسيط، ثمَّ تطبع الناتج:

fun main(args: Array<String>) {
val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg"

print(str.groupBy { it.toByte() } ) 
}

المُخرجات

{97=[a, a], 98=[b], 99=[c], 100=[d, d, d, d, d, d, d, d], 115=[s, s, s], 102=[f, f, f, f, f, f, f], 103=[g, g, g, g, g, g, g, g, g, g, g, g, g], 104=[h, h, h, h], 106=[j, j], 101=[e, e, e], 114=[r], 116=[t], 113=[q]}

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

تعرِّف الشيفرة الآتية سلسلة نصية باسم str، ثمَّ تستدعي الدالة ()groupByTo عبرها مع تمرير دالتين كوسيطين، ثمَّ تطبع الناتج:

fun main(args: Array<String>) {
val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg"

print(str.groupBy ({ it.toByte() } , {it.toUpperCase()}) )
}

المُخرجات:

{97=[A, A], 98=[B], 99=[C], 100=[D, D, D, D, D, D, D, D], 115=[S, S, S], 102=[F, F, F, F, F, F, F], 103=[G, G, G, G, G, G, G, G, G, G, G, G, G], 104=[H, H, H, H], 106=[J, J], 101=[E, E, E], 114=[R], 116=[T], 113=[Q]}

انظر أيضًا

groupByTo()‎: تضيف إلى القاموس المُمرّر عناصر المصفوفة أو المجموعة التي استُدعيت عبرها حيث مفاتيحه تعيدها الدالة المُمرّرة keySelector وقيمه لوائحُ تضم عناصر المصفوفة أو المجموعة (أو ناتج تمرير عناصر المصفوفة أو المجموعة على الدالة valueTransform في حال تمريرها). 

مصادر