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

من موسوعة حسوب
لا ملخص تعديل
طلا ملخص تعديل
 
(4 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة <code>groupingBy()‎</code> في لغة Kotlin}}</noinclude>
<noinclude>{{DISPLAYTITLE: الدالة <code>groupingBy()‎</code> في Kotlin}}</noinclude>
تُنشئ الدالة<code>groupingBy()‎</code> كائنًا من النوع <code>Grouping</code> من [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت عبرها لاستخدامه لاحقًا مع عمليات المجموعات (group-and-fold operations)، وذلك باستخدام الدالة المُمرّرة  <code>keySelector</code> لاستخلاص مفتاح من كل عنصر .
تُنشئ الدالة <code>groupingBy()‎</code> موردًا (source) من النوع <code>Grouping</code> من [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت معها لاستخدامه لاحقًا مع عمليات التجميع (group-and-fold operations) وذلك باستخدام الدالة <code>keySelector</code> المُمرّرة إليها لاستخلاص مفتاح من كل عنصر.
==البنية العامة==
==البنية العامة==
يمكن  استدعاء الدالة<code>groupByTo()‎</code> عبر  [[Kotlin/Array|المصفوفات]]:<syntaxhighlight lang="kotlin">
'''الإصدار المطلوب''': Kotlin 1.1.
 
يمكن  استدعاء الدالة <code>groupByTo()‎</code> مع [[Kotlin/Array|المصفوفات]] و<nowiki/>[[Kotlin/Array|المجموعات]]:<syntaxhighlight lang="kotlin">
inline fun <T, K> Array<out T>.groupingBy(
inline fun <T, K> Array<out T>.groupingBy(
     crossinline keySelector: (T) -> K
     crossinline keySelector: (T) -> K
): Grouping<T, K>
): Grouping<T, K>
</syntaxhighlight>يمكن  استدعاء الدالة<code>groupByTo()‎</code> عبر  [[Kotlin/Array|المجموعات]]:<syntaxhighlight lang="kotlin">
 
inline fun <T, K> Iterable<T>.groupingBy(
inline fun <T, K> Iterable<T>.groupingBy(
     crossinline keySelector: (T) -> K
     crossinline keySelector: (T) -> K
): Grouping<T, K>
): Grouping<T, K>
</syntaxhighlight>يُلاحَظ وجود الكلمة المفتاحية <code>inline</code> للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]].
</syntaxhighlight>وجود الكلمة المفتاحية <code>inline</code> يدل على أنَّ هذه الدالة مباشرة (للمزيد من التفاصيل، راجع صفحة <nowiki/>[[Kotlin/inline functions|الدوال المباشرة (inline functions)]]).
==القيم المٌعادة==
 
كائن من النوع <code>Grouping</code> من [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت عبرها لاستخدامه لاحقًا مع عمليات المجموعات ( group-and-fold ).
== المعاملات ==
 
=== <code>keySelector</code> ===
الدالة المستعملة في استخلاص مفتاح من كل عنصر.
 
==القيم المعادة==
يُعاد موردٌ من النوع <code>Grouping</code> من [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] المعطاة لاستخدامه لاحقًا مع عمليات التجميع (group-and-fold).
==أمثلة==
==أمثلة==
===استخدام الدالة <code>()groupingBy</code> مع المصفوفات===
توضح الشيفرة الآتية كيفيَّة إنشاء كائن من النوع <code>Grouping</code> باستخدام الدالة <code>()groupingBy</code> يستعمل لتجميع الأحرف الأولى من كل سلسلة نصية بحسب عدد مرات تكرارها:<syntaxhighlight lang="kotlin">
تعرف الشيفرة الآتية <nowiki/>[[Kotlin/Array|مصفوفة]] باسم <code>array</code> مكونة من ست [[Kotlin/collections/String|سلاسل نصية]] باستخدام الدالة <code>()arrayOf</code>، ثم تُنشئ منه كائنًا من النوع <code>Grouping</code> باسم <code>grouping</code> باستخدام الدالة <code>()groupingBy</code>، وتمرّر إليها دالة تعيد الحرف الأول من [[Kotlin/collections/String|السلسلة النصية]]، ثم تطبع [[Kotlin/collections/Map|القاموس]] <code>map</code>:<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
val array = arrayOf("a", "abc", "ab", "def","avde" ,"abcd")
    val words = "one two three four five six seven eight nine ten".split(' ')
      
    val frequenciesByFirstChar = words.groupingBy { it.first() }.eachCount()
val grouping = array.groupingBy { it.first()}.eachCount()
    println("Counting first letters:")
      
    println(frequenciesByFirstChar) // {o=1, t=3, f=2, s=2, e=1, n=1}
print(grouping) // {a=5, d=1}
 
    val moreWords = "eleven twelve".split(' ')
     val moreFrequencies = moreWords.groupingBy { it.first() }.eachCountTo(frequenciesByFirstChar.toMutableMap())
     println(moreFrequencies) // {o=1, t=4, f=2, s=2, e=2, n=1}
}
}
</syntaxhighlight>
</syntaxhighlight>
===<nowiki/>انظر أيضًا===
==انظر أيضًا==
<code>[[Kotlin/collections/groupByTo|groupBy()]]</code>: تعيد [[Kotlin/collections/Map|قاموسًا]] يُجمّع عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت عبرها حيث مفاتيحه تعيدها الدالة المُمرّرة <code>keySelector</code> وقيمه لوائحُ تضم عناصر  [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] (أو ناتج تمرير عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] على الدالة <code>valueTransform</code> في حال تمريرها).
* الدالة <code>[[Kotlin/collections/groupBy|groupBy()]]</code> : تجمِّع عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت معها في مجموعات، إذ تطبق دالة محدَّدة على كل عنصر ثمَّ تعاد خريطة تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من العناصر المقابلة.
 
* الدالة <code>[[Kotlin/collections/groupByTo|groupByTo()]]</code>‎: تشبه الدالة <code>[[Kotlin/collections/groupBy|groupBy()‎]]</code> في جميع النواحي باستثناء أنَّها تضيف الناتج المعاد إلى المعامل الممرَّر إليها.
* الدالة <code>[[Kotlin/collections/foldRightIndexed|foldRightIndexed()‎]]</code>: تجمع ناتج تطبيق عملية معينة على قيمة كل عنصر من عناصر المصفوفة أو المجموعة (بدءًا من اليمين إلى اليسار) المستدعاة معها وفهرس ذلك العنصر بشكل تراكمي بالإضافة إلى القيمة الأولية إن أعطيت.  
* الدالة <code>[[Kotlin/collections/foldRight|foldRight()]]</code>‎: تجمع بشكل تراكمي ناتج تطبيق عملية معيَّنة على قيمة كل عنصر من عناصر المصفوفة أو المجموعة (بدءًا من اليمين إلى اليسار) المستدعاة معها والقيمة التراكمية الحالية بالإضافة إلى القيمة الأولية إن أعطيت. 


<code>[[Kotlin/collections/groupByTo|groupByTo()]]</code>‎: تجمّع عناصر <nowiki/>[[Kotlin/Array|المصفوفة]] أو <nowiki/>[[Kotlin/collections|المجموعة]] التي استُدعيت عبرها وتضيفها إلى القاموس.المُمرّر <code>destination</code> حيث مفاتيحه تعيدها الدالة الممرّرة <code>keySelector()‎</code> مُطبّقة على كل عناصر <nowiki/>[[Kotlin/Array|المصفوفة]] أو <nowiki/>[[Kotlin/collections|المجموعة]]، وقيمُه لوائح تضم العناصر المقابلة، وفي حال تمرير معامل ثالث <code>valueTransform</code> فإنّ القيم ستكون لوائح تضم ناتج تطبيق الدالة <code>valueTransform</code> على العناصر المقابلة . ثم تعيد القاموس<code>destination.</code>
==مصادر==
==مصادر==
[https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/grouping-by.html الدالة groupingBy()‎ في التوثيق الرسمي للمكتبة القياسية في لغة Kotlin]
* [https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/grouping-by.html صفحة الدالة groupingBy()‎ في التوثيق الرسمي للمكتبة القياسية في لغة Kotlin]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin Functions]]
[[تصنيف:Kotlin Function]]
[[تصنيف:Kotlin Collection]]

المراجعة الحالية بتاريخ 08:12، 8 سبتمبر 2018

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

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

الإصدار المطلوب: Kotlin 1.1.

يمكن استدعاء الدالة groupByTo()‎ مع المصفوفات والمجموعات:

inline fun <T, K> Array<out T>.groupingBy(
    crossinline keySelector: (T) -> K
): Grouping<T, K>

inline fun <T, K> Iterable<T>.groupingBy(
    crossinline keySelector: (T) -> K
): Grouping<T, K>

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

المعاملات

keySelector

الدالة المستعملة في استخلاص مفتاح من كل عنصر.

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

يُعاد موردٌ من النوع Grouping من المصفوفة أو المجموعة المعطاة لاستخدامه لاحقًا مع عمليات التجميع (group-and-fold).

أمثلة

توضح الشيفرة الآتية كيفيَّة إنشاء كائن من النوع Grouping باستخدام الدالة ()groupingBy يستعمل لتجميع الأحرف الأولى من كل سلسلة نصية بحسب عدد مرات تكرارها:

fun main(args: Array<String>) {
    val words = "one two three four five six seven eight nine ten".split(' ')
    val frequenciesByFirstChar = words.groupingBy { it.first() }.eachCount()
    println("Counting first letters:")
    println(frequenciesByFirstChar) // {o=1, t=3, f=2, s=2, e=1, n=1}

    val moreWords = "eleven twelve".split(' ')
    val moreFrequencies = moreWords.groupingBy { it.first() }.eachCountTo(frequenciesByFirstChar.toMutableMap())
    println(moreFrequencies) // {o=1, t=4, f=2, s=2, e=2, n=1}
}

انظر أيضًا

  • الدالة groupBy()‎ : تجمِّع عناصر المصفوفة أو المجموعة التي استُدعيت معها في مجموعات، إذ تطبق دالة محدَّدة على كل عنصر ثمَّ تعاد خريطة تحوي مجموعاتٍ مفتاحُ كلِّ واحدةٍ منها مرتبطٌ بقائمة من العناصر المقابلة.
  • الدالة groupByTo()‎: تشبه الدالة groupBy()‎ في جميع النواحي باستثناء أنَّها تضيف الناتج المعاد إلى المعامل الممرَّر إليها.
  • الدالة foldRightIndexed()‎: تجمع ناتج تطبيق عملية معينة على قيمة كل عنصر من عناصر المصفوفة أو المجموعة (بدءًا من اليمين إلى اليسار) المستدعاة معها وفهرس ذلك العنصر بشكل تراكمي بالإضافة إلى القيمة الأولية إن أعطيت.  
  • الدالة foldRight()‎: تجمع بشكل تراكمي ناتج تطبيق عملية معيَّنة على قيمة كل عنصر من عناصر المصفوفة أو المجموعة (بدءًا من اليمين إلى اليسار) المستدعاة معها والقيمة التراكمية الحالية بالإضافة إلى القيمة الأولية إن أعطيت. 

مصادر