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

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: الدالة <code>text.groupByTo()‎</code> في لغة Kotlin}}</noinclude> تعيد الدالة<code>groupByTo()‎</code> Kotlin/colle...'
 
مراجعة وتدقيق.
 
(4 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة <code>text.groupByTo()‎</code> في لغة Kotlin}}</noinclude>
<noinclude>{{DISPLAYTITLE: الدالة <code>CharSequence.groupByTo()‎</code> في Kotlin}}</noinclude>
تعيد الدالة<code>groupByTo()‎</code> [[Kotlin/collections/Map|قاموسًا]] يُجمّع حروف  [[Kotlin/CharSequence/index|سلسلة الحروف]] التي استُدعيت عبرها حيث مفاتيحه تعيدها الدالة المُمرّرة <code>keySelector</code> وقيمه لوائحُ تضم عناصر  [[Kotlin/CharSequence/index|سلسلة الحروف]]  (أو ناتج تمرير عناصر  [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] على الدالة <code>valueTransform</code> في حال تمريرها).
تشبه الدالة <code>groupByTo()‎</code> الدالة <code>[[Kotlin/kotlin.text/groupBy|groupBy()‎]]</code> في جميع النواحي باستثناء أنَّها تضيف الناتج المعاد إلى المعامل الممرَّر إليها.
 
القاموس المُعاد يحافظ على على ترتيب التكرار (entry iteration order) للمفاتيح الناتجة عن  [[Kotlin/CharSequence/index|سلسلة الحروف]] الأصلية.
==البنية العامة==
==البنية العامة==
<syntaxhighlight lang="kotlin">
<syntaxhighlight lang="kotlin">
inline fun <K> CharSequence.groupBy(
inline fun <K, M : MutableMap<in K, MutableList<Char>>> CharSequence.groupByTo(
    destination: M,
     keySelector: (Char) -> K
     keySelector: (Char) -> K
): Map<K, List<Char>>
): M
</syntaxhighlight>في حال استدعاء الدالة<code>groupBy()‎</code> على <nowiki/>[[Kotlin/CharSequence/index|سلسلة حروف]] مع تمرير معامل واحد <code>keySelector</code> فإنّها تُجمّع عناصر  <nowiki/>[[Kotlin/CharSequence/index|سلسلة الحروف]] الأصلية في <nowiki/>[[Kotlin/collections/Map|قاموس]]. حيث مفاتيحه تعيدها الدالة الممرّرة <code>keySelector()‎</code> مُطبّقة على كل عناصر  <nowiki/>[[Kotlin/CharSequence/index|سلسلة حروف]] وقيمه لوائح تضم العناصر المقابلة.<syntaxhighlight lang="kotlin">
 
inline fun <K, V> CharSequence.groupBy(
inline fun <K, V, M : MutableMap<in K, MutableList<V>>> CharSequence.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/CharSequence/index|سلسلة الحروف]] مع تمرير معاملين <code>valueTransform</code> و <code>keySelector</code> فإنّها تُجمّع العناصر المعادة من قبل الدالة  <code>valueTransform()‎</code> مُطبّقة على كل عناصر  [[Kotlin/CharSequence/index|سلسلة الحروف]] وتربطها بالمفتاح الذي تعيده الدالة<code>keySelector()‎</code> مطبقة على على عناصر  [[Kotlin/CharSequence/index|سلسلة الحروف]] وتعيد [[Kotlin/collections/Map|قاموسًا]] حيث كل مفتاح مرتبط [[Kotlin/collections/List|بلائحة]] العناصر المقابلة.<syntaxhighlight lang="kotlin">
</syntaxhighlight>إن مُرِّر إلى الدالة <code>groupBy()‎</code> المعامل <code>destination</code> والمعامل <code>keySelector</code> فقط، فستُجمّع محارف [[Kotlin/CharSequence|السلسلة]] المعطاة بحسب المفتاح الذي تعيده الدالة <code>keySelector()‎</code> المطبقة على كل محرف من تلك المحارف ثمَّ تضيف الخريطة الناتجة التي تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من المحارف المقابلة إلى المعامل <code>destination</code>.
inline fun <T, K> Iterable<T>.groupBy(
 
    keySelector: (T) -> K
أمَّا إن مرِّر إلى الدالة <code>groupBy()‎</code> المعاملات <code>destination</code> و <code>valueTransform</code> و <code>keySelector</code>، فستُجمّع محارف [[Kotlin/CharSequence|السلسلة]] المعطاة بحسب القيم التي تعيدها الدالة <code>valueTransform()‎</code> المطبقة على كل محرف من تلك المحارف وبحسب المفتاح الذي تعيده الدالة <code>keySelector()‎</code> المطبقة على العنصر ثمَّ تضيف الخريطة الناتجة التي تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من المحارف المعادة المقابلة إلى المعامل <code>destination</code>.
): Map<K, List<T>>
 
</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>[[Kotlin/collections/MutableMap|MutableMap]]</code> تمثل الوجهة التي سيُضَاف الناتج فيها.
 
=== <code>keySelector</code> ===
دالةٌ تطبق على كل محرف من محارف السلسلة المعطاة، وتعيد المفتاح المقابل لكل محرف.
 
=== <code>valueTransform</code> ===
دالة تطبق على كل محرف من محارف السلسلة المعطاة، وتعيد القيمة المقابلة لكل محرف.
 
==أمثلة==
==أمثلة==
===استخدام الدالة <code>()groupByTo</code> مع السلاسل النصية مع تمرير معامل واحد===
مثالٌ على استعمال الدالة <code>()groupByTo</code> مع تمرير معاملين إليه:<syntaxhighlight lang="kotlin">
تعرِّف الشيفرة الآتية  [[Kotlin/String|سلسلة نصية]] باسم <code>str</code>، ثمَّ تستدعي الدالة  <code>()groupByTo</code> عبرها مع تمرير دالة كوسيط، ثمَّ تطبع الناتج:<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg"
    val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg"
    val map: MutableMap<Byte, MutableList<Char>> = mutableMapOf()


print(str.groupBy { it.toByte() } )  
    str.groupByTo(map) { it.toByte() }
    print(map)
}
}
</syntaxhighlight>المُخرجات<syntaxhighlight lang="kotlin">
</syntaxhighlight>ناتج تنفيذ هذا المثال هو:<syntaxhighlight lang="text">
{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]}
{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]}


</syntaxhighlight>
</syntaxhighlight>
===استخدام الدالة <code>()groupByTo</code> مع سلسلة نصية مع تمرير مُعاملين===
مثالٌ على استعمال الدالة <code>()groupByTo</code> مع تمرير جميع المعاملات إليه:<syntaxhighlight lang="kotlin">
تعرِّف الشيفرة الآتية  [[Kotlin/String|سلسلة نصية]] باسم <code>str</code>، ثمَّ تستدعي الدالة  <code>()groupByTo</code> عبرها مع تمرير دالتين كوسيطين، ثمَّ تطبع الناتج:<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg"
    val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg"
    val map: MutableMap<Byte, MutableList<Char>> = mutableMapOf()


print(str.groupBy ({ it.toByte() } , {it.toUpperCase()}) )
    str.groupByTo(map, { it.toByte() }, { it.toUpperCase() })
    print(map)
}
}
</syntaxhighlight>المُخرجات:<syntaxhighlight lang="kotlin">
</syntaxhighlight>ناتج تنفيذ هذا المثال هو:<syntaxhighlight lang="text">
{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]}
{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]}


</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/kotlin.text/groupBy|groupBy()]]</code>‎: تجمِّع محارف <nowiki/>[[Kotlin/CharSequence|السلسلة]] التي استُدعيت معها في مجموعات، إذ تطبق دالة محدَّدة على كل عنصر ثمَّ تعاد [[Kotlin/collections/Map|خريطة]] تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من المحارف المقابلة.
* الدالة <code>[[Kotlin/kotlin.text/groupingBy|groupingBy()]]</code>‎: تُنشئ موردًا (source) من النوع <code>Grouping</code> من <nowiki/>[[Kotlin/CharSequence|سلسلة المحارف]] التي استُدعيت معها لاستخدامه لاحقًا مع عمليات التجميع (group-and-fold operations) وذلك باستخدام الدالة <code>keySelector</code> المُمرّرة إليها لاستخلاص مفتاح من كل محرف.
 
==مصادر==
==مصادر==
*[http://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/group-by.html الدالة text.groupByTo()‎ في التوثيق الرسمي للمكتبة القياسية في لغة Kotlin]
*[http://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/group-by-to.html صفحة الدالة CharSequence.groupByTo()‎ في التوثيق الرسمي للمكتبة القياسية في لغة Kotlin]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin Functions]]
[[تصنيف:Kotlin Function]]
[[تصنيف:Kotlin Text]]
[[تصنيف:Kotlin CharSequence]]

المراجعة الحالية بتاريخ 14:44، 3 سبتمبر 2018

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

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

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

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

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

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

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

المعاملات

destination

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

keySelector

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

valueTransform

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

أمثلة

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

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 مع تمرير جميع المعاملات إليه:

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()‎: تجمِّع محارف السلسلة التي استُدعيت معها في مجموعات، إذ تطبق دالة محدَّدة على كل عنصر ثمَّ تعاد خريطة تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من المحارف المقابلة.
  • الدالة groupingBy()‎: تُنشئ موردًا (source) من النوع Grouping من سلسلة المحارف التي استُدعيت معها لاستخدامه لاحقًا مع عمليات التجميع (group-and-fold operations) وذلك باستخدام الدالة keySelector المُمرّرة إليها لاستخلاص مفتاح من كل محرف.

مصادر