在外部范围内列出过滤器 – KOTLIN
我刚开始学习科林,我偶然发现了这个小问题。 我有一个对象列表,并在指定范围内筛选列表。 能够获得范围内的对象,但是当我将范围更改为外部边界,获取一个空数组,
所以为了保持简单的问题,可以说我有一个整数列表
original list [1, 2, 3, 4, 5, 6, 7]
并有一个吸管功能,它过滤出的元素
工作条件
fun dropper(args: ArrayList<Int>): List<Int> { return args.filter { it in 2..6 } // it >= 2 && it <= 6 }
输出被接收为
[2, 3, 4, 5, 6]
但是当我改变范围
fun dropper(args: ArrayList<Int>): List<Int> { return args.filter { it in 4..2 } // it <= 2 && it >= 4 // it in 4..2 , was suggested by the IDE }
获得输出为空列表。
我非常肯定列表值没有被清除,因为在这个函数被调用之后,我将列表传递给给出预期结果的其他操作。
4..2
基本上是一个空的范围,因为它转化为it >= 4 && it <= 2
。 要创建递减的范围,您必须使用downTo
:
args.filter { it in 4 downTo 2 }
在一些情况下,也可以reversed
替代:
args.filter { it in (2..4).reversed() }
这个具体的问题也是Dan Lew最近发表的博客文章中的第一个例子,很好地涵盖了范围。
使用downTo
。 阅读范围的详细说明。
范围( x..y
),这里x是起始索引,y是最后一个,它是递增的方式。 所以1..10
范围有10个元素,但是10..1
从10个起10..1
,所以它是一个空的范围。 您需要使用downTo
运算符。
改变你的代码如下:
fun dropper(args: ArrayList<Int>): List<Int> { return args.filter { it in 4 downTo 2 } // it <= 2 && it >= 4 }
你好,你需要使用operator downTo
fun main(args: Array<String>) { var list = arrayListOf<Int>(1, 2, 3, 4, 5, 6, 7) println(dropper(list)) // [2, 3, 4] } fun dropper(args: ArrayList<Int>): List<Int> { return args.filter { it in 4 downTo 2 } // [2, 3, 4] }
这里完全描述了如何使用范围。 – https://kotlinlang.org/docs/reference/ranges.html#ranges
除了这些答案,我也发现了!
操作也起作用
fun dropper(args: ArrayList<Int>): List<Int> { return args.filter { it !in 2..4 } // it <= 2 && it >= 4 }