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

من موسوعة حسوب
لا ملخص تعديل
ط مراجعة وتدقيق.
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة <code>filter()‎</code> في لغة Kotlin}}</noinclude>
ترشِّح الدالة <code>filter()‎</code> عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] أو أزواج الخرائط المعطاة التي تحقِّق شرطًا معيَّنًا ثمّ تعيدها.
تعيد الدالة<code>filter()‎</code> [[Kotlin/Array|لائحة]] تحتوي عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي تحقق الشرط المنطقي <code>predicate()‎</code>  المُمرّر إلى الدالة. وفي حال استدعائها عبر [[Kotlin/collections/Map|قاموس]] فستعيد قاموسًا جديدًا مكونًا من كل الأزوج التي  تحقق الشرط المنطقي <code>predicate()‎</code> الممرر  إلى الدالة، هذا [[Kotlin/collections/Map|القاموس]]<nowiki/>الجديد يحافظ على ترتيب تكرار (entry iteration order) [[Kotlin/collections/Map|القاموس]]<nowiki/>الأصلي.
 
==البنية العامة==
==البنية العامة==
يمكن استدعاء الدالة<code>filter()‎</code> على [[Kotlin/Array|المصفوفات]] أو [[Kotlin/collections|المجموعات]].<syntaxhighlight lang="kotlin">
يمكن استدعاء الدالة <code>filter()‎</code> مع [[Kotlin/Array|المصفوفات]] و<nowiki/>[[Kotlin/collections|المجموعات]]:<syntaxhighlight lang="kotlin">
inline fun <T> Array<out T>.filter(
inline fun <T> Array<out T>.filter(
     predicate: (T) -> Boolean
     predicate: (T) -> Boolean
سطر 35: سطر 33:
): List<T>  
): List<T>  


</syntaxhighlight>يمكن استدعاء الدالة<code>filter()‎</code> على [[Kotlin/collections/Map|القواميس]].<syntaxhighlight lang="kotlin">
</syntaxhighlight>ومع الخرائط أيضًا:<syntaxhighlight lang="kotlin">
inline fun <K, V> Map<out K, V>.filter(
inline fun <K, V> Map<out K, V>.filter(
     predicate: (Entry<K, V>) -> Boolean
     predicate: (Entry<K, V>) -> Boolean
): Map<K, V>
): Map<K, V>
</syntaxhighlight>يُلاحَظ وجود الكلمة المفتاحية <code>inline</code> للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]].
</syntaxhighlight>وجود الكلمة المفتاحية <code>inline</code> يدل على أن هذه الدالة مباشرة (لمزيد من التفاصيل، راجع <nowiki/>[[Kotlin/inline functions|توثيق الدوال المباشرة]]).
 
==القيم المٌعادة==
== القيم المٌعادة ==
إن أعطيت [[Kotlin/Array|مصفوفة]] أو [[Kotlin/collections|مجموعة]]، فستُعاد [[Kotlin/List|قائمة]] تحوي العناصر التي أعيدت القيمة <code>true</code> معها عند تطبيق الدالة <code>predicate()‎</code> المُمرَّرة عليها. أمَّا إن أعطيت خريطة، فستُعاد خريطة جديدة تحوي الأزواج (قيمة/مفتاح) التي أعيدت القيمة <code>true</code> معها عند تطبيق الدالة <code>predicate()‎</code> المعطاة عليها؛ ترتَّب الأزواج المعادة في هذه الخريطة بنفس ترتيبها في الخريطة الأصليَّة.
[[Kotlin/Array|لائحة]] تحتوي عناصر  [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي تحقق الشرط المنطقي <code>predicate()‎</code> المُمرّر إلى الدالة. وفي حال استدعائها عبر [[Kotlin/collections/Map|قاموس]] فستعيد قاموسًا جديدًا مكونًا من كل الأزوج التي  تحقق الشرط المنطقي <code>predicate()‎</code> الممرر  إلى الدالة.
 
==أمثلة==
==أمثلة==
===استخدام الدالة <code>()filter</code> مع المصفوفات===
===استخدام الدالة <code>()filter</code> مع المصفوفات===
تعرف الشيفرة الآتية [[Kotlin/Array|مصفوفة]] باسم <code>array</code>مكونة من ستة أعداد باستخدام الدالة <code>()arrayOf</code>، ثم تستخدم الدالة <code>()filter</code> لتصفية عناصر  [[Kotlin/Array|المصفوفة]] <code>array</code> وانشاء [[Kotlin/Array|مصفوفة]] جديدة تضم عناصر [[Kotlin/Array|المصفوفة]] <code>array</code> الأصغر من <code>3</code>، ثم تطبع الناتج:<syntaxhighlight lang="kotlin">
تعرِّف الشيفرة الآتية [[Kotlin/Array|مصفوفة]] باسم <code>array</code> باستخدام الدالة <code>()arrayOf</code> ثمَّ تستخدم الدالة <code>()filter</code> لترشيح العناصر التي تقل قيمتها عن القيمة 3:<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
val array = arrayOf(1,2,3,4,5,6)
val array = arrayOf(1,2,3,4,5,6)
سطر 52: سطر 48:
}
}
</syntaxhighlight>
</syntaxhighlight>
===استخدام الدالة <code>()filter</code> مع القواميس: الحالة الأولى===
===استخدام الدالة <code>()filter</code> مع الخرائط===
تعرف الشيفرة الآتية [[Kotlin/Array|قاموسًا]] باسم <code>map</code> مكونًا من ثلاثة أزواج باستخدام الدالة <code>()mapOf</code>، ثم تستخدم الدالة <code>()filter</code> لتصفية عناصر  [[Kotlin/collections/Map|القاموس]] <code>map</code> وانشاء [[Kotlin/collections/Map|قاموس]] جديد يضم أزواج [[Kotlin/collections/Map|القاموس]] <code>map</code> التي تكون قيمتها (<code>value</code>) أصغر من <code>2</code>، ثم تطبع الناتج:<syntaxhighlight lang="kotlin">
تعرِّف الشيفرة الآتية خريطة باسم <code>map</code> باستخدام الدالة <code>()mapOf</code> ثمَّ تستخدم الدالة <code>()filter</code> لترشيح الأزواج (قيمة/مفتاح) التي تكون فيها القيمة أقل من 2:<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
val map = mapOf("key1" to 1, "key2" to 2, "key3" to 3)
val map = mapOf("key1" to 1, "key2" to 2, "key3" to 3)
سطر 60: سطر 56:
println(filteredMap) // {key1=1}
println(filteredMap) // {key1=1}
}
}
</syntaxhighlight>
</syntaxhighlight>تعرِّف الشيفرة الآتية خريطة باسم <code>map</code> باستخدام الدالة <code>()mapOf</code> ثمَّ تستخدم الدالة <code>()filter</code> لترشيح الأزواج (قيمة/مفتاح) التي تكون فيها القيمة مساوية إلى القيمة 0 (لاحظ في هذه الحالة أنَّنا سنحصل على خريطة فارغة لعدم تطابق الأزواج مع الشرط المعطى):<syntaxhighlight lang="kotlin">
===استخدام الدالة <code>()filter</code> مع القواميس: الحالة الثانية===
تعرف الشيفرة الآتية [[Kotlin/collections/Map|قاموسًا]] باسم <code>map</code> مكونًا من ثلاثة أزواج باستخدام الدالة <code>()mapOf</code>، ثم تستخدم الدالة <code>()filter</code> لتصفية عناصر  [[Kotlin/Array|القاموس]] <code>map</code> وانشاء [[Kotlin/collections/Map|قاموس]] جديد يضم أزواج [[Kotlin/collections/Map|القاموس]] <code>map</code> التي تكون قيمتها (<code>value</code>) مساوية للقيمة <code>0</code>، ولما كانت كل الأزواج لا تحقق هذا الشرط المنطقي فستعيد الدالة <code>()filter</code> [[Kotlin/collections/Map|قاموسًا]] فارغًا، ثم تطبع الناتج:<syntaxhighlight lang="kotlin">
fun main(args: Array<String>) {
fun main(args: Array<String>) {
val map = mapOf("key1" to 1, "key2" to 2, "key3" to 3)
val map = mapOf("key1" to 1, "key2" to 2, "key3" to 3)
val filteredMap = map.filter { it.value == 0 }
val filteredMap = map.filter { it.value < 2 }


println(filteredMap) // {}
println(filteredMap) // {key1=1}
}
}
</syntaxhighlight>
</syntaxhighlight>
===انظر أيضًا===
==انظر أيضًا==
*<code>[[Kotlin/collections/filterIndexed|filterIndexed()]]</code>‎: تعيد  [[Kotlin/Array|لائحة]] تحتوي عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] التي تحقق الشرط المنطقي <code>predicate()‎</code> المُمرّر إلى الدالة والتي تأخذ قيمة وفهرس عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] كوسيطين.
*الدالة [[Kotlin/collections/filterIndexed|<code>filterIndexed()</code>‎]]: ترشِّح ترشِّح عناصر [[Kotlin/Array|المصفوفة]] أو [[Kotlin/collections|المجموعة]] المعطاة التي تُعاد القيمة <code>true</code> معها عند تطبيق الدالة <code>predicate()‎</code> المُمرّر عليها، إذ يمرَّر فهرس كل عنصر وقيمته إلى الدالة <code>predicate()‎</code> ثم تعيد بدورها قيمة منطقيَّة.
*الدالة <code>[[Kotlin/collections/fill|fill()‎]]</code>: تبدِّل قيمة جديدة معطاة مكان عناصر محدَّدة في المصفو
* الدالة <code>[[Kotlin/collections/elementAtOrElse|elementAtOrElse()‎]]</code>: تجلب عنصرًا ذي فهرس معيَّن من <nowiki/>[[Kotlin/Array|المصفوفة]] أو <nowiki/>[[Kotlin/Array|المجموعة]] التي استُدعيت معها. إن كان الفهرس المعطى خارج حدود <nowiki/>[[Kotlin/Array|المصفوفة]] أو <nowiki/>[[Kotlin/Array|المجموعة]]، فستُعيد الدالة ناتج استدعاء دالة معينة.
* الدالة <code>[[Kotlin/collections/drop|drop()]]</code>‎: تعيد قائمة تحوي جميع عناصر <nowiki/>[[Kotlin/Array|المصفوفة]] أو <nowiki/>[[Kotlin/Array|المجموعة]] التي استُدعيت معها باستثناء آخر <code>n</code> عنصر.
==مصادر==
==مصادر==
<span> </span>
*[https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/filter.html الدالة filter()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]<noinclude>{{DISPLAYTITLE: الدالة <code>filter()‎</code> في لغة Kotlin}}</noinclude>
*[https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/filter.html الدالة  filter()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]  
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin Functions]]
[[تصنيف:Kotlin Functions]]

مراجعة 14:45، 4 يوليو 2018

ترشِّح الدالة filter()‎ عناصر المصفوفة أو المجموعة أو أزواج الخرائط المعطاة التي تحقِّق شرطًا معيَّنًا ثمّ تعيدها.

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

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

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

ومع الخرائط أيضًا:

inline fun <K, V> Map<out K, V>.filter(
    predicate: (Entry<K, V>) -> Boolean
): Map<K, V>

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

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

إن أعطيت مصفوفة أو مجموعة، فستُعاد قائمة تحوي العناصر التي أعيدت القيمة true معها عند تطبيق الدالة predicate()‎ المُمرَّرة عليها. أمَّا إن أعطيت خريطة، فستُعاد خريطة جديدة تحوي الأزواج (قيمة/مفتاح) التي أعيدت القيمة true معها عند تطبيق الدالة predicate()‎ المعطاة عليها؛ ترتَّب الأزواج المعادة في هذه الخريطة بنفس ترتيبها في الخريطة الأصليَّة.

أمثلة

استخدام الدالة ()filter مع المصفوفات

تعرِّف الشيفرة الآتية مصفوفة باسم array باستخدام الدالة ()arrayOf ثمَّ تستخدم الدالة ()filter لترشيح العناصر التي تقل قيمتها عن القيمة 3:

fun main(args: Array<String>) {
val array = arrayOf(1,2,3,4,5,6)
println(array.filter {it < 3}) // [1, 2]
}

استخدام الدالة ()filter مع الخرائط

تعرِّف الشيفرة الآتية خريطة باسم map باستخدام الدالة ()mapOf ثمَّ تستخدم الدالة ()filter لترشيح الأزواج (قيمة/مفتاح) التي تكون فيها القيمة أقل من 2:

fun main(args: Array<String>) {
val map = mapOf("key1" to 1, "key2" to 2, "key3" to 3)
val filteredMap = map.filter { it.value < 2 }

println(filteredMap) // {key1=1}
}

تعرِّف الشيفرة الآتية خريطة باسم map باستخدام الدالة ()mapOf ثمَّ تستخدم الدالة ()filter لترشيح الأزواج (قيمة/مفتاح) التي تكون فيها القيمة مساوية إلى القيمة 0 (لاحظ في هذه الحالة أنَّنا سنحصل على خريطة فارغة لعدم تطابق الأزواج مع الشرط المعطى):

fun main(args: Array<String>) {
val map = mapOf("key1" to 1, "key2" to 2, "key3" to 3)
val filteredMap = map.filter { it.value < 2 }

println(filteredMap) // {key1=1}
}

انظر أيضًا

  • الدالة filterIndexed(): ترشِّح ترشِّح عناصر المصفوفة أو المجموعة المعطاة التي تُعاد القيمة true معها عند تطبيق الدالة predicate()‎ المُمرّر عليها، إذ يمرَّر فهرس كل عنصر وقيمته إلى الدالة predicate()‎ ثم تعيد بدورها قيمة منطقيَّة.
  • الدالة fill()‎: تبدِّل قيمة جديدة معطاة مكان عناصر محدَّدة في المصفو
  • الدالة elementAtOrElse()‎: تجلب عنصرًا ذي فهرس معيَّن من المصفوفة أو المجموعة التي استُدعيت معها. إن كان الفهرس المعطى خارج حدود المصفوفة أو المجموعة، فستُعيد الدالة ناتج استدعاء دالة معينة.
  • الدالة drop()‎: تعيد قائمة تحوي جميع عناصر المصفوفة أو المجموعة التي استُدعيت معها باستثناء آخر n عنصر.

مصادر