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

من موسوعة حسوب
مراجعة 12:49، 19 أغسطس 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (استبدال النص - '==القيم المٌعادة==' ب'==القيم المعادة==')

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

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

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

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

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

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

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

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

القاموس destination.

أمثلة

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

تعرِّف الشيفرة الآتية سلسلة نصية باسم str، ثم تُنشئ قاموسًا فارغًا باسم map باستخدام الدالة ()mutableMapOf، ثمَّ تستدعي الدالة ()groupByTo عبر str مع تمرير القاموس map ودالة كوسيطين، ثمَّ تطبع الناتج:

fun main(args: Array<String>) {
val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg"
val map: MutableMap<Byte, MutableList<Char>> = mutableMapOf()
    
str.groupByTo (map) { it.toByte() }
    
print( map )
}

المُخرجات

{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، ثم تُنشئ قاموسًا فارغًا باسم map باستخدام الدالة ()mutableMapOf، ثمَّ تستدعي الدالة ()groupByTo عبر str مع تمرير القاموس map ودالتين كوسائط، ثمَّ تطبع الناتج:

fun main(args: Array<String>) {
val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg"
val map: MutableMap<Byte, MutableList<Char>> = mutableMapOf()
    
str.groupByTo (map, { it.toByte() }, {it.toUpperCase()} )
    
print( map )
}

المُخرجات:

{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]}

انظر أيضًا

  • groupBy()‎: تعيد قاموسًا يُجمّع حروف سلسلة الحروف التي استُدعيت عبرها حيث مفاتيحه تعيدها الدالة المُمرّرة keySelector وقيمه لوائحُ تضم عناصر سلسلة الحروف (أو ناتج تمرير عناصر المصفوفة أو المجموعة على الدالة valueTransform في حال تمريرها).
  • groupingBy()‎: تُنشئ كائنًا من النوع Grouping من  سلسلة الحروف التي استُدعيت عبرها لاستخدامه لاحقًا مع عمليات المجموعات (group-and-fold operations)، وذلك باستخدام الدالة المُمرّرة keySelector لاستخلاص مفتاح من كل عنصر .

مصادر