Kotlin-Ranges(范围)

2017-11-29  本文已影响0人  122604

Ranges 表达式使用一个 .. 操作符,它被定义实现了一个 RangTo 方法。

Ranges 帮助我们简化代码。比如:

                if(i >= 0 && i <= 10){

                                println(i)

                }

        转化成:

                if (i in 0..10){

                                println(i)

                }

Ranges 被定义为可以被比较的任意类型,但是对于数字类型,比较器会通过转换它为简单的类似Java代码来避免额外开销的方式来优化它。数字类型的 ranges 也可以被迭代,编译器会转换它们为与Java中使用index的for循环的相同字节码的方式来进行优化:

                if (i in 0..10){

                        println(i)

                }

Ranges 默认会自增长,所以如果像以下的代码:

                for (i in 10..0){

                        println(i)

                }

它就不会做任何事情。但是你可以使用 downTo 函数:

                for(i in 10 downTo 0){

                        println(i)

                }

我们可以在 ranges 中使用 step 来定义一个从1到一个值的不同的空隙:

                for (i in 1..4 step 2) println(i)

                for (i in 4 downTo 1 step 2) println(i)

如果你想去创建一个open ranges(不包含最后一项,类似数学中的开区间),你可以使用 until 函数:

                for (i in 0 until 4) println(i)

这一行会打印从0到3,但是会跳过最后一个值。这也就是说 0 until 4 ==0..3 。

在一个list中迭代时,使用 (i in 0 until list.size) 比 (i in0..list.size - 1) 更加容易理解。

比如,一个简单的方式去从一个 ViewGroup 中得到一个Views列表可以这么做:

val views = (0..viewGroup.childCount - 1).map { viewGroup.getChildAt(it) }

混合使用 ranges 和 函数操作符 可以避免我们使用明确地循环去迭代一个集合,

还有明确地去创建一个我们用来添加views的list。所有的事情都在一行代码中做好

了。

上一篇 下一篇

猜你喜欢

热点阅读