الدالة filterNot()‎ في Kotlin

من موسوعة حسوب
مراجعة 17:11، 22 يوليو 2018 بواسطة جميل-بيلوني (نقاش | مساهمات) (مراجعة وتدقيق.)

تعيد الدالة filterNot()‎ قائمةً تحوي عناصر المصفوفة أو المجموعة التي لم تحقق شرطًا منطقيًّا محدَّدًا. إن استدعيت مع خريطة (map)، فستعيد خريطة جديدة تحوي الأزواج التي لم تحقق ذلك الشرط المنطقي. تحافظ هذه الخريطة الجديد على ترتيب تكرار المدخلات (entry iteration order) كما في الخريطة الأصلية.

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

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

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

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

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

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

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

تُعاد قائمةٌ تحوي عناصر المصفوفة أو المجموعة التي لم تحقق الشرط المنطقي predicate()‎ المُمرّر إليها، أو خريطة جديدة -عند استدعائها مع الخرائط- تحوي الأزواج التي لم تحقق ذلك الشرط المنطقي.

أمثلة

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

تعرف الشيفرة الآتية مصفوفة باسم array باستخدام الدالة ()arrayOf، ثمَّ تستخدم الدالة ()filterNot لترشيح عناصر تلك المصفوفة الأكبر من 2:

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

استخدام الدالة ()filterNot مع القواميس

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

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

    println(filteredMap) // {key2=2, key3=3}
}

تعرف الشيفرة الآتية خريطة أيضًا باسم map باستخدام الدالة ()mapOf، ثم تستخدم الدالة ()filterNot لترشيح أزواج تلك الخريطة التي تساوي قيمتها القيمة 0. ولما كانت كل الأزواج لا تحقق هذا الشرط المنطقي، فستعيد الدالة ()filterNot خريطةً تضم كل الأزواج المعطاة:

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

    println(filteredMap) // {key1=1, key2=2, key3=3}
}

انظر أيضًا

  • الدالة filterNotTo()‎: تشبه هذه الدالة في جميع النواحي باستثناء أنَّها تضيف الناتج المعاد إلى المعامل الممرَّر إليها.
  • الدالة filterNotNull()‎: تعيد جميع عناصر المصفوفة أو المجموعة المعطاة باستثناء تلك ذات القيمة null.
  • الدالة filterIndexed()‎: ترشِّح عناصر المصفوفة أو المجموعة المعطاة التي أعيدت القيمة true معها عند تطبيق الدالة predicate()‎ المُمرّر عليها، إذ يمرَّر فهرس كل عنصر وقيمته إلى الدالة predicate()‎ ثم تعيد بدورها قيمة منطقيَّة.
  • الدالة filter()‎: ترشِّح عناصر المصفوفة أو المجموعة أو أزواج الخرائط المعطاة التي تحقِّق شرطًا معيَّنًا ثمّ تعيدها.
  • الدالة filterIsInstance()‎: تعيد قائمة تحوي عناصر المصفوفة أو المجموعة المعطاة التي هي نسخةٌ (instance) من نوع أو صنفٍ معيّن.

مصادر