الفرق بين المراجعتين لصفحة: «Kotlin/kotlin.text/groupBy»
ط استبدال النص - '==القيم المٌعادة==' ب'==القيم المعادة==' |
جميل-بيلوني (نقاش | مساهمات) مراجعة وتدقيق. |
||
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: الدالة <code> | <noinclude>{{DISPLAYTITLE: الدالة <code>CharSequence.groupBy()</code> في Kotlin}}</noinclude> | ||
تجمِّع الدالة <code>groupBy()</code> محارف <nowiki/>[[Kotlin/CharSequence|السلسلة]] التي استُدعيت معها في مجموعات، إذ تطبق دالة محدَّدة على كل عنصر ثمَّ تعاد [[Kotlin/collections/Map|خريطة]] تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من المحارف المقابلة. | |||
تحافظ الخريطة المُعادة على على ترتيب التكرار (entry iteration order) للمفاتيح الناتجة عن <nowiki/>[[Kotlin/CharSequence/index|سلسلة المحارف]] الأصلية. | |||
==البنية العامة== | ==البنية العامة== | ||
<syntaxhighlight lang="kotlin"> | <syntaxhighlight lang="kotlin"> | ||
سطر 8: | سطر 8: | ||
keySelector: (Char) -> K | keySelector: (Char) -> K | ||
): Map<K, List<Char>> | ): Map<K, List<Char>> | ||
inline fun <K, V> CharSequence.groupBy( | inline fun <K, V> CharSequence.groupBy( | ||
keySelector: (Char) -> K, | keySelector: (Char) -> K, | ||
valueTransform: (Char) -> V | valueTransform: (Char) -> V | ||
): Map<K, List<V>> | ): Map<K, List<V>> | ||
</syntaxhighlight> | </syntaxhighlight>يُلاحَظ وجود الكلمة المفتاحية <code>inline</code> للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]]. | ||
== المعاملات == | |||
=== <code>keySelector</code> === | |||
دالةٌ تطبق على كل محرف من محارف السلسلة المعطاة، وتعيد المفتاح المقابل لكل محرف. | |||
=== <code>valueTransform</code> === | |||
دالة تطبق على كل محرف من محارف السلسلة المعطاة، وتعيد القيمة المقابلة لكل محرف. | |||
==القيم المعادة== | ==القيم المعادة== | ||
[[Kotlin/ | إن مُرِّر إلى الدالة <code>groupBy()</code> المعامل <code>keySelector</code> فقط، فستُجمّع محارف [[Kotlin/CharSequence|السلسلة]] المعطاة بحسب المفتاح الذي تعيده الدالة <code>keySelector</code> المطبقة على كل محرف من تلك المحارف ثمَّ تعاد خريطة تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من المحارف المقابلة. | ||
أمَّا إن مرِّر إلى الدالة <code>groupBy()</code> المعاملين <code>valueTransform</code> و <code>keySelector</code>، فستُجمّع محارف [[Kotlin/CharSequence|السلسلة]] المعطاة بحسب القيم التي تعيدها الدالة <code>valueTransform</code> المطبقة على كل محرف من تلك المحارف وبحسب المفتاح الذي تعيده الدالة <code>keySelector</code> المطبقة على المحرف نفسه ثمَّ تعاد خريطة تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من المحارف المعادة المقابلة. | |||
==أمثلة== | ==أمثلة== | ||
مثالٌ على استعمال الدالة <code>()groupBy</code> مع تمرير معامل واحد إليه:<syntaxhighlight lang="kotlin"> | |||
fun main(args: Array<String>) { | fun main(args: Array<String>) { | ||
val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg" | val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg" | ||
print(str.groupBy { it.toByte() } ) | print(str.groupBy { it.toByte() } ) | ||
} | } | ||
</syntaxhighlight> | </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>()groupBy</code> مع تمرير معاملين إليه:<syntaxhighlight lang="kotlin"> | |||
fun main(args: Array<String>) { | fun main(args: Array<String>) { | ||
val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg" | val str = "abcdsafddssfghjjffhgggfeeregtgggfgddghhgfdqdgdg" | ||
print(str.groupBy ({ it.toByte() } , {it.toUpperCase()}) ) | print(str.groupBy({ it.toByte() }, { it.toUpperCase() })) | ||
} | } | ||
</syntaxhighlight> | </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/kotlin.text/groupByTo|groupByTo()]]</code>: | * الدالة <code>[[Kotlin/kotlin.text/groupByTo|groupByTo()]]</code>: تشبه الدالة <code>groupBy()</code> في جميع النواحي باستثناء أنَّها تضيف الناتج المعاد إلى المعامل الممرَّر إليها. | ||
* <code>[[Kotlin/kotlin.text/groupingBy|groupingBy()]]</code>: تُنشئ | * الدالة <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 الدالة | *[http://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/group-by.html صفحة الدالة CharSequence.groupBy() في التوثيق الرسمي للمكتبة القياسية في لغة Kotlin] | ||
[[تصنيف:Kotlin]] | [[تصنيف:Kotlin]] | ||
[[تصنيف:Kotlin | [[تصنيف:Kotlin Function]] | ||
[[تصنيف:Kotlin Text]] | |||
[[تصنيف:Kotlin CharSequence]] |
المراجعة الحالية بتاريخ 14:44، 3 سبتمبر 2018
تجمِّع الدالة groupBy()
محارف السلسلة التي استُدعيت معها في مجموعات، إذ تطبق دالة محدَّدة على كل عنصر ثمَّ تعاد خريطة تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من المحارف المقابلة.
تحافظ الخريطة المُعادة على على ترتيب التكرار (entry iteration order) للمفاتيح الناتجة عن سلسلة المحارف الأصلية.
البنية العامة
inline fun <K> CharSequence.groupBy(
keySelector: (Char) -> K
): Map<K, List<Char>>
inline fun <K, V> CharSequence.groupBy(
keySelector: (Char) -> K,
valueTransform: (Char) -> V
): Map<K, List<V>>
يُلاحَظ وجود الكلمة المفتاحية inline
للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع توثيق الدوال المباشرة (inline functions).
المعاملات
keySelector
دالةٌ تطبق على كل محرف من محارف السلسلة المعطاة، وتعيد المفتاح المقابل لكل محرف.
valueTransform
دالة تطبق على كل محرف من محارف السلسلة المعطاة، وتعيد القيمة المقابلة لكل محرف.
القيم المعادة
إن مُرِّر إلى الدالة groupBy()
المعامل keySelector
فقط، فستُجمّع محارف السلسلة المعطاة بحسب المفتاح الذي تعيده الدالة keySelector
المطبقة على كل محرف من تلك المحارف ثمَّ تعاد خريطة تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من المحارف المقابلة.
أمَّا إن مرِّر إلى الدالة groupBy()
المعاملين valueTransform
و keySelector
، فستُجمّع محارف السلسلة المعطاة بحسب القيم التي تعيدها الدالة valueTransform
المطبقة على كل محرف من تلك المحارف وبحسب المفتاح الذي تعيده الدالة keySelector
المطبقة على المحرف نفسه ثمَّ تعاد خريطة تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من المحارف المعادة المقابلة.
أمثلة
مثالٌ على استعمال الدالة ()groupBy
مع تمرير معامل واحد إليه:
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]}
مثالٌ على استعمال الدالة ()groupBy
مع تمرير معاملين إليه:
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()
: تشبه الدالةgroupBy()
في جميع النواحي باستثناء أنَّها تضيف الناتج المعاد إلى المعامل الممرَّر إليها. - الدالة
groupingBy()
: تُنشئ موردًا (source) من النوعGrouping
من سلسلة المحارف التي استُدعيت معها لاستخدامه لاحقًا مع عمليات التجميع (group-and-fold operations) وذلك باستخدام الدالةkeySelector
المُمرّرة إليها لاستخلاص مفتاح من كل محرف.