الدالة filter()‎ في لغة Kotlin

من موسوعة حسوب

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

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

يمكن استدعاء الدالة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>

يمكن استدعاء الدالةfilter()‎ على القواميس.

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

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

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

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

أمثلة

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

تعرف الشيفرة الآتية مصفوفة باسم arrayمكونة من ستة أعداد باستخدام الدالة ()arrayOf، ثم تستخدم الدالة ()filterIndexed لتصفية عناصر المصفوفة array وانشاء مصفوفة جديدة تضم عناصر المصفوفة array الأصغر من 3، ثم تطبع الناتج:

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

استخدام الدالة ()filterIndexed مع القواميس: الحالة الأولى

تعرف الشيفرة الآتية قاموسًا باسم map مكونًا من ثلاثة أزواج باستخدام الدالة ()mapOf، ثم تستخدم الدالة ()filter لتصفية عناصر القاموس map وانشاء قاموس جديد يضم أزواج القاموس map التي تكون قيمتها (value) أصغر من 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}
}

استخدام الدالة ()filterIndexed مع القواميس: الحالة الثانية

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

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

println(filteredMap) // {}
}

انظر أيضًا

مصادر