疯狂kotlin讲义连载之运算符和表达式——区间运算符

本文介绍了Kotlin中的区间运算符,包括闭区间运算符、半开区间运算符及反向区间运算符,并展示了如何使用这些运算符进行区间定义与遍历。

3.3 区间运算符

Kotlin提供了两个区间运算符,它们都可以非常方便地构建一种数据结构,这种数据结构可包含特定区间内的所有值。

3.3.1闭区间运算符

闭区间运算符 a .. b 用于定义一个从 a~b (包括 a b 边界值)的所有值的区间,对于闭区间运算符而言, a 不能大于 b ,否则程序运行时将会报错。

Kotlinfor-in循环可用于遍历区间内的所有数据。例如如下代码。

程序清单: codes\03\3.3\RangeTest.kt

fun main(args: Array<String>) {

//使用闭区间运算符定义区间

var range1 = 2 .. 6

for( num in range1 ) {

println("${num} * 5 = ${num * 5}")

}

}

上面粗体字代码构建了一个区间,该区间包含 2~6 的所有数值,包括 2 3 4 5 6 5 个值。

3.3.2 半开区间运算符

半开区间运算符 a until b 用于定义一个从 a~b (包括 a 边界值,但不包含 b 边界值)的所有值的区间,半开区间运算符与闭区间运算符类似, a 也不能大于 b

如果 a until b 中边界 a 与边界 b 的值相等,就会产生一个空区间,该区间不包含任何值;如果 a .. b 中边界 a 与边界 b 的值相等,就会产生一个只包含一个值的区间,该区间只包含一个边界值。

利用半开区间遍历数组等列表(数组元素的索引是 0 到长度减 1 )时非常方便,例如如下程序(程序清单同上): // 定义数组

val books = arrayOf("Swift" , "Kotlin" , "C" , "C++")

//使用半开区间运算符定义区间

for ( index in 0 until books.size) {

println("${index+1}种语言是:${books[index]}")

}

上面程序构建了 0 until books.size 的区间,其中 books.size 返回数组元素的个数,也就是 4 ,而且此处使用的是半开区间,因此该区间代表 0 1 2 3 等数值。

3.3.3 反向区间

如果程序希望区间可以从大到小,则可使用 downTo 运算符(其实是一个 infix 函数),该函数同样构建一个闭区间。对于 a downTo b 而言,此时要求 b 不能大于 a

例如如下程序使用 downTo 定义了反向区间。

程序清单: codes\03\3.3\DownToTest.kt

fun main(args: Array<String>) {

//使用反向闭区间运算符定义区间

var range1 = 6 downTo 2

for( num in range1 ) {

println("${num} * 5 = ${num * 5}")

}

}

上面程序使用 downTo 定义的区间将会从 6 逆序降到 2 ,上面程序的输出结果如下所示。

6 * 5 = 30

5 * 5 = 25

4 * 5 = 20

3 * 5 = 15

2 * 5 = 10

3.3.3 区间步长

前面我们见到的所有区间的默认步长都是 1 ,也就是区间内两个值之间的差值是 1 。而通过 step
运算符(其实是一个 infix 函数)可以显式指定区间的步长。例如如下程序(程序清单同上)。

//为反向闭区间指定步长

for( num in 7 downTo 1 step 2 ) {

println("${num} * 5 = ${num * 5}")

}

上面程序使用 downTo 定义的区间将会从 7 逆序降到 1 ,且步长为 2 ,上面程序的输出结果如下所示。

7 * 5 = 35

5 * 5 = 25

3 * 5 = 15

1 * 5 = 5

以上内容节选自《疯狂Kotlin讲义》:一本让您最直接认识Kotlin的疯狂讲义


本书即将于2017年11月发售 敬请期待

往期连载


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值