在外部范围内列出过滤器 – 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 }