「Mac玩转仓颉内测版30」基础篇10 - 区间类型详解
本篇将介绍 Cangjie 中的区间类型,包括区间的定义、创建、访问、常见操作及其在循环和条件判断中的应用,帮助开发者熟练掌握区间的使用。
关键词
- 区间类型定义
- 区间创建
- 区间访问
- 区间操作
- 应用场景
一、区间类型概述
在 Cangjie 中,区间表示一个具有固定步长的数值序列,常用于遍历、计数和范围判断。区间类型是泛型类型,使用 Range 表示。T 是可以支持关系操作符,并且可以和 Int64 类型值进行加法的类型。常见的 Range 用于表示整数区间。
区间实例通常包含三个主要属性:start、end 和 step。其中,start 和 end 表示序列的起始值和结束值,step 表示前后两个元素之间的差值(即步长),且步长类型为 Int64,不能为 0。
示例:
let rangeA = Range<Int64>(1, 6, 1, true, true, true) // 包含 1 到 6
let rangeB = Range<Int64>(5, 1, -1, true, true, false) // 包含 5 到 2for (i in rangeA) {println(i)
}
println('')for (i in rangeB) {println(i)
}
输出:
1
2
3
4
5
65
4
3
2
二、区间类型字面量
Cangjie 提供两种区间字面量格式:左闭右开 和 左闭右闭。
- 左闭右开:格式为 start…end : step,表示从 start 开始,以 step 为步长,直到不包含 end 的序列。
- 左闭右闭:格式为 start…=end : step,表示从 start 开始,以 step 为步长,直到包含 end 的序列。
示例:
let n = 8
let range1 = 2..8 : 2 // range1 包含 2, 4, 6
let range2 = 3..=n : 2 // range2 包含 3, 5, 7
let range3 = n..0 : -3 // range3 包含 8, 5, 2
for (i in range1) {println(i)
}
println('')for (i in range2) {println(i)
}
println('')for (i in range3) {println(i)
}
println('')
输出:
2
4
63
5
78
5
2
区间字面量的 step 默认值为 1,但不能为 0。如果 step 为 0,将引发错误。此外,区间也可能为空区间。
示例:
let range4 = 5..10 : 1 // range4 包含 5 到 9
let range5 = 10..5 : -1 // range5 包含 10 到 6
let range6 = 10..5 : 1 // 空区间
for (i in range4) {println(i)
}
println('')for (i in range5) {println(i)
}
println('')for (i in range6) {println(i)
}
println('')
输出:
5
6
7
8
910
9
8
7
6(空区间)
三、区间的访问
区间可用于遍历、计数等操作,尤其适用于循环和条件判断。Cangjie 中不支持直接调用 contains 或 reversed 方法,因此我们可以使用循环进行值判断。
示例:使用循环判断值是否在区间内:
let range = 0..15 : 3
let target = 9
var found = false
for (num in range) {if (num == target) {found = truebreak}
}
println("是否包含 9: ${found}") // 输出: 是否包含 9: true
输出:
是否包含 9: true
四、区间的常见操作
Cangjie 提供多种区间操作,便于区间范围的管理和判断:
- 遍历区间:区间支持使用 for 循环进行遍历。
- 反向区间:可以通过自定义递减步长来实现反向区间遍历。
示例:
let range = 2..9 : 2// 遍历区间
for (num in range) {println("遍历元素: ${num}")
}// 反向区间
let reversedRange = 8..=2 : -2
for (num in reversedRange) {println("反向区间元素: ${num}")
}
输出:
遍历元素: 2
遍历元素: 4
遍历元素: 6
遍历元素: 8
反向区间元素: 8
反向区间元素: 6
反向区间元素: 4
反向区间元素: 2
五、区间的应用场景
区间在 Cangjie 中应用广泛,尤其适合用于循环控制和条件判断等情况:
5.1 循环遍历
区间可以简化对数值范围的遍历操作。
示例:
let range = 1..5
var product = 1for (num in range) {product *= num
}println("区间乘积: ${product}") // 输出: 区间乘积: 24
输出:
区间乘积: 24
5.2 条件判断
区间可用于快速判断某个数值是否落在指定范围内。
示例:
let heightRange = 150..190
let height = 185
var found = false
for (num in heightRange) {if (num == height) {println("身高符合标准")found = truebreak}
}if (!found) {println("身高不符合标准")
}
输出:
身高符合标准
六、区间的高级操作
区间支持一些高级操作,如反向区间、指定步长创建递增或递减区间等,便于处理复杂数据场景。
示例:
let revRange = 10..=0 : -2
for (num in revRange) {println("递减区间元素: ${num}")
}
输出:
递减区间元素: 10
递减区间元素: 8
递减区间元素: 6
递减区间元素: 4
递减区间元素: 2
递减区间元素: 0
小结
本篇介绍了 Cangjie 中的区间类型,涵盖区间的定义、创建、访问、常见操作及应用场景,帮助开发者熟练掌握区间在遍历和条件判断中的使用。
下篇预告
下一篇将介绍 Cangjie 的 Unit 类型 和 Nothing 类型,详解它们在表示空值、处理异常和优化代码结构中的应用,敬请关注 「Mac玩转仓颉内测版31」基础篇11 - Unit 与 Nothing 类型详解!
上一篇: 「Mac玩转仓颉内测版29」基础篇9 - 数组类型详解
下一篇: 「Mac玩转仓颉内测版31」基础篇11 - Unit 与 Nothing 类型详解
作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=232
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。