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

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: الدالة <code>text.associateBy()‎</code> في لغة Kotlin}}</noinclude> تعيد الدالة <code>associateBy()‎</code> Kotlin/...'
 
مراجعة وتدقيق.
 
(3 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة <code>text.associateBy()‎</code> في لغة Kotlin}}</noinclude>
<noinclude>{{DISPLAYTITLE: الدالة <code>CharSequence.associateBy()‎</code> في Kotlin}}</noinclude>
تعيد الدالة <code>associateBy()‎</code> [[Kotlin/Map|قاموسًا]] (map) يحتوي أزواجًا من "مفتاح/قيمة" ناتجة عن تمرير عناصر [[Kotlin/CharSequence/index|سلسلة الحروف]] التي استُدعيت عبرها.  
<nowiki/>تعيد الدالة <code>associateBy()‎</code> <nowiki/>[[Kotlin/collections/Map|خريطةً]] (map) مكونة من الأزواج "مفتاح/قيمة"، إذ يكون المفتاح (key) هو الناتج الذي تعيده الدالة <code>keySelector</code> الممررة إليها وتكون القيمة (value) المقابلة لذلك المفتاح هي إمَّا محارف [[Kotlin/CharSequence|سلسلة المحارف]] المعطاة أو الناتج الذي تعيده الدالة <code>valueTransform</code> الممررة.


إن كان لزوجين نفس المفتاح (key) فالأخير هو الذي سيُضاف إلى [[Kotlin/Map|القاموس]].
إن كان لزوجين نفس المفتاح (key)، فالأخير هو الذي سيُضاف إلى [[Kotlin/collections/Map|الخريطة]].


يحافظ [[Kotlin/Map|القاموس]]<nowiki/>المُعاد على نفس ترتيب التكرار الخاص  [[Kotlin/CharSequence/index|بسلسلة الحروف]] الأصليَّة.
تحافظ الخريطة المُعادة على نفس ترتيب التكرار الخاص  [[Kotlin/CharSequence/index|بسلسلة المحارف]] الأصليَّة.
==البنية العامة==
==البنية العامة==
<syntaxhighlight lang="kotlin">
<syntaxhighlight lang="kotlin">
inline fun <K, V> CharSequence.associate(
inline fun <K> CharSequence.associateBy(
     transform: (Char) -> Pair<K, V>
    keySelector: (Char) -> K
): Map<K, V>
): Map<K, Char>
</syntaxhighlight>يلاحظ وجود الكلمة المفتاحية <code>inline</code> يدل على أنَّ هذه الدالة مباشرة (للمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]]).
 
inline fun <K, V> CharSequence.associateBy(
     keySelector: (Char) -> K,  
    valueTransform: (Char) -> V
): Map<K, V> (source)
</syntaxhighlight>وجود الكلمة المفتاحية <code>inline</code> يدل على أن هذه الدالة مباشرة (للمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]]).
 
== المعاملات ==
 
=== <code>keySelector</code> ===
دالةٌ يمرر إليها كل محرف من محارف [[Kotlin/CharSequence|سلسلة المحارف]] المعطاة على حدة وتعيد المفتاح المقابل لذلك المحرف المراد وضعه في الخريطة.
 
=== <code>valueTransform</code> ===
دالةٌ يمرر إليها كل محرف من محارف [[Kotlin/CharSequence|سلسلة المحارف]] المعطاة على حدة وتعيد القيمة المقابلة لذلك المحرف المراد وضعها في الخريطة.
 
==القيم المعادة==
==القيم المعادة==
[[Kotlin/Map|قاموس]].
تعاد [[Kotlin/collections/Map|خريطة]] مكونة من الأزواج "مفتاح/قيمة"، إذ يكون المفتاح (key) هو الناتج الذي تعيده الدالة <code>keySelector</code> وتكون القيمة (value) المقابلة لذلك المفتاح هي إمَّا محارف [[Kotlin/CharSequence|سلسلة المحارف]] المعطاة أو الناتج الذي تعيده الدالة <code>valueTransform</code>.
==أمثلة==
==أمثلة==
===استخدام الدالة <code>()associateBy</code> ===
تعرِّف الشيفرة التالية سلسلة نصية باسم <code>str</code> ثمَّ تنشأ [[Kotlin/Map|خريطة]] باسم <code>map</code> بتمرير الدالة <code>()upper</code> (التي تحول الحروف إلى الحالة الكبيرة [UpperCase]) إلى <code>()associateBy</code> ثم تطبع الناتج:<syntaxhighlight lang="kotlin">
تعرِّف الشيفرة الآتية سلسلة نصية باسم <code>str</code>، ثمَّ تنشئ [[Kotlin/Map|قاموسًا]]<nowiki/>باسم <code>map</code> بتمرير الدالة <code>()toMap</code> إلى <code>()associateBy</code>التي تحول تلك الحروف إلى زوج مكون من الحرف في الحالة الكبيرة [UpperCase] ومن قيمته العددية، ثمَّ تطبع الناتج:<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
val str = "hsoub"
    val str = "hsoub"
val toMap: (Char) -> Pair<Char, Int> = {
    val upper: (Char) -> Char = {
         Pair(it.toUpperCase(), it.toInt())
         it.toUpperCase()
     }
     }
     val map = str.associate(toMap)
     val map = str.associateBy(upper)


     println(map) // {H=104, S=115, O=111, U=117, B=98}
     println(map) // {H=h, S=s, O=o, U=u, B=b}
}
}
</syntaxhighlight>
</syntaxhighlight>
==انظر أيضًا==
==انظر أيضًا==
* <code>[[Kotlin/kotlin.text/append|append()]]‎</code>:تضم الوسائط المُمرّرة إلى الكائن الذي استُدعيت عبره، والذي ينبغي أن يكون من الصنف <code>Appendable</code>.
*الدالة <code>[[Kotlin/kotlin.text/associateByTo|associateByTo()]]‎</code>: تشبه الدالة <code>associateBy()‎</code> تمامًا باستثناء أنها تضيف الناتج الذي تعيده إلى خريطة موجودة مسبقًا
 
* <code>[[Kotlin/kotlin.text/all|all()]]‎</code>: تعيد الدالة <code>all()‎</code> القيمة <code>true</code> إن كانت كل الحروف تحقق الشرط المنطقي المُمرّر <code>predicate</code>


* <code>[[Kotlin/kotlin.text/asSequence|asSequence()]]‎</code>: تنشئ كائنًا من الصنف <code>Sequence</code> والذي يُغلّف سلسلة الحروف التي استُدعيت عبرها، لأجل استعمالها في الحلقات التكرارية.
*الدالة [[Kotlin/kotlin.text/associate|<code>associate()‎</code>]]: تعيد [[Kotlin/collections/Map|خريطة]] (map) تحوي أزواجًا من "مفتاح/قيمة" ناتجة عن تمرير محارف [[Kotlin/CharSequence|سلسلة المحارف]] التي استُدعيت معها إلى الدالة الممررة إليها. 


*الدالة <code>[[Kotlin/kotlin.text/asIterable|asIterable()]]‎</code>: تنشئ نسخةً من الواجهة <code>[[Kotlin/collections/Iterable|Iterable]]</code> التي تغلّف [[Kotlin/CharSequence|سلسلة المحارف]] التي استُدعيت معها لاستعمالها في الحلقات التكرارية، إذ تعيد محارفها عندما تُستخدَم في حلقات التكرار (مثل <code>[[Kotlin/control flow#.D8.AA.D8.B9.D8.A8.D9.8A.D8.B1 for|for]]</code>).
==مصادر==
==مصادر==
*[http://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/associate.html الدالة  text.associateBy()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
*[http://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/associate-by.html صفحة الدالة CharSequence.associateBy()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin Functions]]
[[تصنيف:Kotlin Function]]
[[تصنيف:Kotlin Text]]
[[تصنيف:Kotlin CharSequence]]

المراجعة الحالية بتاريخ 06:54، 2 سبتمبر 2018

تعيد الدالة associateBy()‎ خريطةً (map) مكونة من الأزواج "مفتاح/قيمة"، إذ يكون المفتاح (key) هو الناتج الذي تعيده الدالة keySelector الممررة إليها وتكون القيمة (value) المقابلة لذلك المفتاح هي إمَّا محارف سلسلة المحارف المعطاة أو الناتج الذي تعيده الدالة valueTransform الممررة.

إن كان لزوجين نفس المفتاح (key)، فالأخير هو الذي سيُضاف إلى الخريطة.

تحافظ الخريطة المُعادة على نفس ترتيب التكرار الخاص بسلسلة المحارف الأصليَّة.

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

inline fun <K> CharSequence.associateBy(
    keySelector: (Char) -> K
): Map<K, Char>

inline fun <K, V> CharSequence.associateBy(
    keySelector: (Char) -> K, 
    valueTransform: (Char) -> V
): Map<K, V> (source)

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

المعاملات

keySelector

دالةٌ يمرر إليها كل محرف من محارف سلسلة المحارف المعطاة على حدة وتعيد المفتاح المقابل لذلك المحرف المراد وضعه في الخريطة.

valueTransform

دالةٌ يمرر إليها كل محرف من محارف سلسلة المحارف المعطاة على حدة وتعيد القيمة المقابلة لذلك المحرف المراد وضعها في الخريطة.

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

تعاد خريطة مكونة من الأزواج "مفتاح/قيمة"، إذ يكون المفتاح (key) هو الناتج الذي تعيده الدالة keySelector وتكون القيمة (value) المقابلة لذلك المفتاح هي إمَّا محارف سلسلة المحارف المعطاة أو الناتج الذي تعيده الدالة valueTransform.

أمثلة

تعرِّف الشيفرة التالية سلسلة نصية باسم str ثمَّ تنشأ خريطة باسم map بتمرير الدالة ()upper (التي تحول الحروف إلى الحالة الكبيرة [UpperCase]) إلى ()associateBy ثم تطبع الناتج:

fun main(args: Array<String>) {
    val str = "hsoub"
    val upper: (Char) -> Char = {
        it.toUpperCase()
    }
    val map = str.associateBy(upper)

    println(map) // {H=h, S=s, O=o, U=u, B=b}
}

انظر أيضًا

  • الدالة associateByTo(): تشبه الدالة associateBy()‎ تمامًا باستثناء أنها تضيف الناتج الذي تعيده إلى خريطة موجودة مسبقًا. 
  • الدالة associate()‎: تعيد خريطة (map) تحوي أزواجًا من "مفتاح/قيمة" ناتجة عن تمرير محارف سلسلة المحارف التي استُدعيت معها إلى الدالة الممررة إليها. 
  • الدالة asIterable(): تنشئ نسخةً من الواجهة Iterable التي تغلّف سلسلة المحارف التي استُدعيت معها لاستعمالها في الحلقات التكرارية، إذ تعيد محارفها عندما تُستخدَم في حلقات التكرار (مثل for).

مصادر