الفرق بين المراجعتين ل"Kotlin/collections/flatMap"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: الدالة <code>flatMap()‎</code> في لغة Kotlin}}</noinclude> تعيد الدالة<code>flatMap()‎</code> العنصر الأول...')
 
ط
 
(8 مراجعات متوسطة بواسطة 3 مستخدمين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة <code>flatMap()‎</code> في لغة Kotlin}}</noinclude>
+
<noinclude>{{DISPLAYTITLE: الدالة <code>flatMap()‎</code> في Kotlin}}</noinclude>
تعيد الدالة<code>flatMap()‎</code> العنصر الأول من [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت عبرها، وفي حال تمرير دالة منطقية كمعامل فستعيد أول عنصر يحقق تلك الدالة.  
+
تعيد الدالة <code>flatMap()‎</code> قائمةً تضم ناتج تطبيق الدالة المُمرّرة إليها على عناصر [[Kotlin/Array|المصفوفة]]، أو [[Kotlin/collections|المجموعة]]، أو الخريطة التي استُدعيت معها.
 +
==البنية العامة==
 +
يمكن استدعاء الدالة <code>flatMap()‎</code> مع [[Kotlin/Array|المصفوفات]]:<syntaxhighlight lang="kotlin">
 +
inline fun <T, R> Array<out T>.flatMap(
 +
    transform: (T) -> Iterable<R>
 +
): List<R>
 +
inline fun <R> ByteArray.flatMap(
 +
    transform: (Byte) -> Iterable<R>
 +
): List<R>
 +
inline fun <R> ShortArray.flatMap(
 +
    transform: (Short) -> Iterable<R>
 +
): List<R>
 +
inline fun <R> IntArray.flatMap(
 +
    transform: (Int) -> Iterable<R>
 +
): List<R>
 +
inline fun <R> LongArray.flatMap(
 +
    transform: (Long) -> Iterable<R>
 +
): List<R>
 +
inline fun <R> FloatArray.flatMap(
 +
    transform: (Float) -> Iterable<R>
 +
): List<R>
 +
inline fun <R> DoubleArray.flatMap(
 +
    transform: (Double) -> Iterable<R>
 +
): List<R>
 +
inline fun <R> BooleanArray.flatMap(
 +
    transform: (Boolean) -> Iterable<R>
 +
): List<R>
 +
inline fun <R> CharArray.flatMap(
 +
    transform: (Char) -> Iterable<R>
 +
): List<R>
 +
 
 +
</syntaxhighlight>ويمكن استدعاؤها مع المجموعات:<syntaxhighlight lang="kotlin">
 +
inline fun <T, R> Iterable<T>.flatMap(
 +
    transform: (T) -> Iterable<R>
 +
): List<R>
 +
</syntaxhighlight>ويمكن استدعاؤها أيضًا مع الخرائط:<syntaxhighlight lang="kotlin">
 +
inline fun <K, V, R> Map<out K, V>.flatMap(
 +
    transform: (Entry<K, V>) -> Iterable<R>
 +
): List<R>
 +
</syntaxhighlight>وجود الكلمة المفتاحية <code>inline</code> يدل على أنَّ هذه الدالة مباشرة (للمزيد من التفاصيل، راجع صفحة <nowiki/>[[Kotlin/inline functions|الدوال المباشرة (inline functions)]]).
  
إن كانت  [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت  الدالة<code>first()‎</code>عبرها فارغة أو لم يكن هناك أي عنصر يحقق الدالة المنطقية الممررة إليها فستعيد الدالة <code>first()‎</code> القيمة المعدومة <code>null</code>.
+
== المعاملات ==
==البنية العامة==
 
في حال استدعاء الدالة<code>firstOrNull()‎</code> بدون معامل فستعيد العنصر الأول.<syntaxhighlight lang="kotlin">
 
fun <T> Array<out T>.firstOrNull(): T?
 
fun ByteArray.firstOrNull(): Byte?
 
fun ShortArray.firstOrNull(): Short?
 
fun IntArray.firstOrNull(): Int?
 
fun LongArray.firstOrNull(): Long?
 
fun FloatArray.firstOrNull(): Float?
 
fun DoubleArray.firstOrNull(): Double?
 
fun BooleanArray.firstOrNull(): Boolean?
 
fun CharArray.firstOrNull(): Char?
 
  
</syntaxhighlight>في حال استدعاء الدالة<code>firstOrNull()‎</code> مع دالة منطقية كمعامل فستعيد العنصر الأول الذي يحقق تلك الدالة.<syntaxhighlight lang="kotlin">
+
=== <code>transform</code> ===
inline fun <T> Array<out T>.firstOrNull(
+
دالةٌ تطبق على كل عنصر من عناصر [[Kotlin/Array|المصفوفة]]، أو [[Kotlin/collections|المجموعة]]، أو الخريطة المعطاة، وتعيد قيمة معينة تحل مكانه.
    predicate: (T) -> Boolean
 
): T?
 
inline fun ByteArray.firstOrNull(
 
    predicate: (Byte) -> Boolean
 
): Byte?
 
inline fun ShortArray.firstOrNull(
 
    predicate: (Short) -> Boolean
 
): Short?
 
inline fun IntArray.firstOrNull(
 
    predicate: (Int) -> Boolean
 
): Int?
 
inline fun LongArray.firstOrNull(
 
    predicate: (Long) -> Boolean
 
): Long?
 
inline fun FloatArray.firstOrNull(
 
    predicate: (Float) -> Boolean
 
): Float?
 
inline fun DoubleArray.firstOrNull(
 
    predicate: (Double) -> Boolean
 
): Double?
 
inline fun BooleanArray.firstOrNull(
 
    predicate: (Boolean) -> Boolean
 
): Boolean?
 
inline fun CharArray.firstOrNull(
 
    predicate: (Char) -> Boolean
 
): Char?
 
inline fun <T> Iterable<T>.firstOrNull(
 
    predicate: (T) -> Boolean
 
): T?
 
  
</syntaxhighlight>في حال استدعاء الدالة<code>firstOrNull()‎</code> بدون معامل على<nowiki/>[[Kotlin/collections|مجموعة]] أو [[Kotlin/collections/List|لائحة]] فستعيد العنصر الأول:<syntaxhighlight lang="kotlin">
+
==القيم المعادة==
fun <T> Iterable<T>.firstOrNull(): T?
+
تُعاد قائمةٌ تضم ناتج تطبيق الدالة <code>transform‎</code> المعطاة على كل عنصر من عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] أو الخريطة المعطاة أيضًا.
fun <T> List<T>.firstOrNull(): T?
 
</syntaxhighlight>يُلاحَظ وجود الكلمة المفتاحية <code>inline</code> للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]].
 
==القيم المٌعادة==
 
العنصر الأول من [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت عبرها، وفي حال تمرير دالة منطقية كمعامل فستعيد أول عنصر يحقق تلك الدالة. إن كانت  [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت  الدالة<code>first()‎</code>عبرها فارغة أو لم يكن هناك أي عنصر يحقق الدالة المنطقية الممررة إليها فستعيد الدالة <code>first()‎</code> القيمة المعدومة <code>null</code>.  
 
 
==أمثلة==
 
==أمثلة==
===استخدام الدالة <code>()flatMap</code> مع المصفوفات: الحالة الأولى===
+
تعرِّف الشيفرة الآتية خريطةً باسم <code>map</code> باستخدام الدالة <code>()mapOf</code>، ثمَّ تستخدم الدالة <code>()flatMap</code> لإنشاء قائمة تحوي ناتج تطبيق الدالة <code>()func</code> المعرَّفة مسبقًا على أزواج تلك الخريطة:<syntaxhighlight lang="kotlin">
تعرف الشيفرة الآتية <nowiki/>[[Kotlin/Array|مصفوفة]] باسم <code>array</code>مكونة من ستة أعداد باستخدام الدالة <code>()arrayOf</code>، ثم تستخدم الدالة <code>()firstOrNull</code> لإيجاد العنصر  الأول في [[Kotlin/Array|المصفوفة]]<code>array</code>، ثم تطبع الناتج:<syntaxhighlight lang="kotlin">
 
fun main(args: Array<String>) {
 
val array = arrayOf(9, 2, 3, 5,0,6)
 
 
 
println(array.firstOrNull()) // 9
 
}
 
</syntaxhighlight>
 
===استخدام الدالة <code>()firstOrNull</code> مع المصفوفات: الحالة الثانية===
 
تعرف الشيفرة الآتية <nowiki/>[[Kotlin/Array|مصفوفة]] باسم <code>array</code>مكونة من ستة أعداد باستخدام الدالة <code>()arrayOf</code>، ثم تُعرّف الدالة المنطقية <code>()predicate</code> التي تحدد ما إذا كان العدد المُمرّر إليها أصغر من <code>0</code> ، ثم تستخدم الدالة <code>()firstOrNull</code> لإيجاد العنصر الأول في [[Kotlin/Array|المصفوفة]]<code>array</code> الذي يحقق الدالة <code>()predicate</code>،  ولما كانت كل عناصر  <code>array</code> لا تحقق هذه الدالة فستعيد <code>null</code>، ثم تطبع الناتج:<syntaxhighlight lang="kotlin">
 
 
fun main(args: Array<String>) {
 
fun main(args: Array<String>) {
val array = arrayOf(9, 2, 3, 8, 5,6)
+
    val map = mapOf("x" to 2, "y" to 6, "z" to 5)
val predicate  : (Int) -> Boolean = { it < 0 }
+
    val func: (Int) -> Array<Int> = { arrayOf(it)}
  
println(array.firstOrNull(predicate)) // null
+
    println(map.flatMap { (a, b) -> listOf(a) }) // [x, y, z]
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
==انظر أيضًا==
 
==انظر أيضًا==
*<code>[[Kotlin/collections/first|first()]]</code>‎: تعيد العنصر الأول من <nowiki/>[[Kotlin/Array|المصفوفة]] أو <nowiki/>[[Kotlin/collections|المجموعة]] التي استُدعيت عبرها، وفي حال تمرير دالة منطقية كمعامل فستعيد أول عنصر يحقق تلك الدالة.
+
*الدالة <code>[[Kotlin/collections/flatMapTo|flatMapTo()]]</code>‎: تشبه هذه الدالة في جميع النواحي باستثناء أنَّها تسند الناتج الذي تعيده إلى المعامل الممرَّر إليها. 
*<code>[[Kotlin/collections/find|find()]]</code>: تعيد العنصر الأول من [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت عبرها والذي يحقق الشرط المنطقي <code>predicate</code> المُمرّر إليها. وإن لم يكن هناك  أي عنصر يحقق ذلك فستعيد <code>null.</code>
+
*الدالة <code>[[Kotlin/collections/flatten|flatten()]]</code>: تعيد [[Kotlin/collections/List|قائمةً]] واحدة فقط تحوي جميع عناصر [[Kotlin/Array|المصفوفات]] أو [[Kotlin/collections|المجموعات]] المتشعبة ضمن [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت معها.
*<code>[[Kotlin/collections/findLast|findLast()]]</code>‎: تعيد العنصر الأخير من [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي استُدعيت عبرها والذي يحقق الشرط المنطقي <code>predicate</code> المُمرّر إليها. وإن لم يكن هناك  أي عنصر يحقق ذلك فستعيد <code>null.</code>
 
 
==مصادر==
 
==مصادر==
*[https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/first-or-null.html الدالة  flatMap()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
+
*[https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/flat-map.html صفحة الدالة flatMap()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
 
[[تصنيف:Kotlin]]
 
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin Functions]]
+
[[تصنيف:Kotlin Function]]
 +
[[تصنيف:Kotlin Collection]]

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

تعيد الدالة flatMap()‎ قائمةً تضم ناتج تطبيق الدالة المُمرّرة إليها على عناصر المصفوفة، أو المجموعة، أو الخريطة التي استُدعيت معها.

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

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

inline fun <T, R> Array<out T>.flatMap(
    transform: (T) -> Iterable<R>
): List<R> 
inline fun <R> ByteArray.flatMap(
    transform: (Byte) -> Iterable<R>
): List<R> 
inline fun <R> ShortArray.flatMap(
    transform: (Short) -> Iterable<R>
): List<R> 
inline fun <R> IntArray.flatMap(
    transform: (Int) -> Iterable<R>
): List<R> 
inline fun <R> LongArray.flatMap(
    transform: (Long) -> Iterable<R>
): List<R> 
inline fun <R> FloatArray.flatMap(
    transform: (Float) -> Iterable<R>
): List<R> 
inline fun <R> DoubleArray.flatMap(
    transform: (Double) -> Iterable<R>
): List<R> 
inline fun <R> BooleanArray.flatMap(
    transform: (Boolean) -> Iterable<R>
): List<R> 
inline fun <R> CharArray.flatMap(
    transform: (Char) -> Iterable<R>
): List<R>

ويمكن استدعاؤها مع المجموعات:

inline fun <T, R> Iterable<T>.flatMap(
    transform: (T) -> Iterable<R>
): List<R>

ويمكن استدعاؤها أيضًا مع الخرائط:

inline fun <K, V, R> Map<out K, V>.flatMap(
    transform: (Entry<K, V>) -> Iterable<R>
): List<R>

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

المعاملات

transform

دالةٌ تطبق على كل عنصر من عناصر المصفوفة، أو المجموعة، أو الخريطة المعطاة، وتعيد قيمة معينة تحل مكانه.

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

تُعاد قائمةٌ تضم ناتج تطبيق الدالة transform‎ المعطاة على كل عنصر من عناصر المصفوفة أو المجموعة أو الخريطة المعطاة أيضًا.

أمثلة

تعرِّف الشيفرة الآتية خريطةً باسم map باستخدام الدالة ()mapOf، ثمَّ تستخدم الدالة ()flatMap لإنشاء قائمة تحوي ناتج تطبيق الدالة ()func المعرَّفة مسبقًا على أزواج تلك الخريطة:

fun main(args: Array<String>) {
    val map = mapOf("x" to 2, "y" to 6, "z" to 5)
    val func: (Int) -> Array<Int> = { arrayOf(it)}

    println(map.flatMap { (a, b) -> listOf(a) }) // [x, y, z]
}

انظر أيضًا

مصادر