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

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: الدالة <code>text.groupingBy()‎</code> في لغة Kotlin}}</noinclude> تعيد الدالة<code>groupingBy()‎</code> Kotlin/col...'
 
لا ملخص تعديل
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة <code>text.groupingBy()‎</code> في لغة Kotlin}}</noinclude>
<noinclude>{{DISPLAYTITLE: الدالة <code>text.groupingBy()‎</code> في لغة Kotlin}}</noinclude>
تعيد الدالة<code>groupingBy()‎</code> [[Kotlin/collections/Map|قاموسًا]] يُجمّع حروف  [[Kotlin/CharSequence/index|سلسلة الحروف]] التي استُدعيت عبرها حيث مفاتيحه تعيدها الدالة المُمرّرة <code>keySelector</code> وقيمه لوائحُ تضم عناصر  [[Kotlin/CharSequence/index|سلسلة الحروف]] (أو ناتج تمرير عناصرها على الدالة <code>valueTransform</code> في حال تمريرها).
تُنشئ الدالة<code>groupingBy()‎</code> كائنًا من النوع <code>Grouping</code> من  [[Kotlin/CharSequence/index|سلسلة الحروف]] التي استُدعيت عبرها لاستخدامه لاحقًا مع عمليات المجموعات (group-and-fold operations)، وذلك باستخدام الدالة المُمرّرة <code>keySelector</code> لاستخلاص مفتاح من كل عنصر .
 
القاموس المُعاد يحافظ على على ترتيب التكرار (entry iteration order) للمفاتيح الناتجة عن  [[Kotlin/CharSequence/index|سلسلة الحروف]] الأصلية.
==البنية العامة==
==البنية العامة==
<syntaxhighlight lang="kotlin">
<syntaxhighlight lang="kotlin">
inline fun <K> CharSequence.groupBy(
inline fun <K> CharSequence.groupingBy(
     keySelector: (Char) -> K
     crossinline keySelector: (Char) -> K
): Map<K, List<Char>>
): Grouping<Char, K>
</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">
</syntaxhighlight><nowiki/><nowiki/><nowiki/><nowiki/>يُلاحَظ وجود الكلمة المفتاحية <code>inline</code> للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]].
inline fun <K, V> CharSequence.groupBy(
    keySelector: (Char) -> K,
    valueTransform: (Char) -> V
): Map<K, List<V>>
</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|بلائحة]] العناصر المقابلة.
 
يُلاحَظ وجود الكلمة المفتاحية <code>inline</code> للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]].
==القيم المٌعادة==
==القيم المٌعادة==
[[Kotlin/collections/Map|قاموس]].
كائن من النوع <code>Grouping</code>.
==أمثلة==
==أمثلة==
===استخدام الدالة <code>()groupingBy</code> مع السلاسل النصية مع تمرير معامل واحد===
===استخدام الدالة <code>()groupingBy</code> مع السلاسل النصية مع تمرير معامل واحد===
تعرِّف الشيفرة الآتية  [[Kotlin/String|سلسلة نصية]] باسم <code>str</code>، ثمَّ تستدعي الدالة  <code>()groupingBy</code> عبرها مع تمرير دالة كوسيط، ثمَّ تطبع الناتج:<syntaxhighlight lang="kotlin">
تعرِّف الشيفرة الآتية  [[Kotlin/String|سلسلة نصية]] باسم <code>str</code>، ثم تُنشئ منه كائنًا من النوع <code>Grouping</code> باسم <code>grouping</code> باستخدام الدالة <code>()groupingBy</code>، وتمرّر إليها دالة، ثم تطبع الناتج:<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg"
val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg"
 
val grouping = str.groupingBy { it.toByte()}.eachCount()
print(str.groupBy { it.toByte() } )  
   
print(grouping)
}
}
</syntaxhighlight>المُخرجات<syntaxhighlight lang="kotlin">
</syntaxhighlight>المُخرجات<syntaxhighlight lang="kotlin">
{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=2, 98=1, 99=1, 100=8, 115=3, 102=7, 103=13, 104=4, 106=2, 101=3, 114=1, 116=1, 113=1}


</syntaxhighlight>
</syntaxhighlight>
===استخدام الدالة <code>()groupingBy</code> مع سلسلة نصية مع تمرير مُعاملين===
==انظر أيضًا==
تعرِّف الشيفرة الآتية  [[Kotlin/String|سلسلة نصية]] باسم <code>str</code>، ثمَّ تستدعي الدالة <code>()groupingBy</code> عبرها مع تمرير دالتين كوسيطين، ثمَّ تطبع الناتج:<syntaxhighlight lang="kotlin">
* <code>[[Kotlin/kotlin.text/groupByTo|groupByTo()]]</code>‎: تجمّع الدالة<code>groupByTo()</code> عناصر  <nowiki/>[[Kotlin/CharSequence/index|سلسلة الحروف]] التي استُدعيت عبرها وتضيفها إلى القاموس المُمرّر <code>destination</code> حيث مفاتيحه تعيدها الدالة الممرّرة <code>keySelector()</code> مُطبّقة على كل عناصر  [[Kotlin/CharSequence/index|سلسلة الحروف]]، وقيمُه لوائح تضم العناصر المقابلة، وفي حال تمرير معامل ثالث <code>valueTransform</code> فإنّ القيم ستكون لوائح تضم ناتج تطبيق الدالة <code>valueTransform</code> على العناصر المقابلة . ثم تعيد القاموس<code>destination.</code>
fun main(args: Array<String>) {
* <code>[[Kotlin/kotlin.text/groupBy|groupBy()]]</code>‎: تعيد قاموسًا يُجمّع حروف سلسلة الحروف التي استُدعيت عبرها حيث مفاتيحه تعيدها الدالة المُمرّرة <code>keySelector</code> وقيمه لوائحُ تضم عناصر سلسلة الحروف (أو ناتج تمرير عناصر <nowiki/>[[Kotlin/Array|المصفوفة]] أو <nowiki/>[[Kotlin/collections|المجموعة]] على الدالة <code>valueTransform</code> في حال تمريرها).
val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg"


print(str.groupBy ({ it.toByte() } , {it.toUpperCase()}) )
}
</syntaxhighlight>المُخرجات:<syntaxhighlight lang="kotlin">
{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>
==انظر أيضًا==
<code>[[Kotlin/kotlin.text/groupByTo|groupByTo()]]</code>‎: تجمّع الدالة<code>groupByTo()‎</code> عناصر  <nowiki/>[[Kotlin/CharSequence/index|سلسلة الحروف]] التي استُدعيت عبرها وتضيفها إلى القاموس المُمرّر <code>destination</code> حيث مفاتيحه تعيدها الدالة الممرّرة <code>keySelector()‎</code> مُطبّقة على كل عناصر  [[Kotlin/CharSequence/index|سلسلة الحروف]]، وقيمُه لوائح تضم العناصر المقابلة، وفي حال تمرير معامل ثالث <code>valueTransform</code> فإنّ القيم ستكون لوائح تضم ناتج تطبيق الدالة <code>valueTransform</code> على العناصر المقابلة . ثم تعيد القاموس<code>destination.</code>
==مصادر==
==مصادر==
*[http://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/group-by.html الدالة text.groupingBy()‎ في التوثيق الرسمي للمكتبة القياسية في لغة Kotlin]
*[http://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/grouping-by.html الدالة text.groupingBy()‎ في التوثيق الرسمي للمكتبة القياسية في لغة Kotlin]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin Functions]]
[[تصنيف:Kotlin Functions]]

مراجعة 18:25، 9 يوليو 2018

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

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

inline fun <K> CharSequence.groupingBy(
    crossinline keySelector: (Char) -> K
): Grouping<Char, K>

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

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

كائن من النوع Grouping.

أمثلة

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

تعرِّف الشيفرة الآتية سلسلة نصية باسم str، ثم تُنشئ منه كائنًا من النوع Grouping باسم grouping باستخدام الدالة ()groupingBy، وتمرّر إليها دالة، ثم تطبع الناتج:

fun main(args: Array<String>) {
val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg"
val grouping = str.groupingBy { it.toByte()}.eachCount()
    
print(grouping)
}

المُخرجات

{97=2, 98=1, 99=1, 100=8, 115=3, 102=7, 103=13, 104=4, 106=2, 101=3, 114=1, 116=1, 113=1}

انظر أيضًا

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

مصادر