「Mac玩转仓颉内测版30」基础篇10 - 区间类型详解

2024-11-23 20:31:02
12次阅读
0个评论
最后修改时间:2024-11-24 12:07:07

本篇将介绍 Cangjie 中的区间类型,包括区间的定义、创建、访问、常见操作及其在循环和条件判断中的应用,帮助开发者熟练掌握区间的使用。


关键词
  • 区间类型定义
  • 区间创建
  • 区间访问
  • 区间操作
  • 应用场景

一、区间类型概述

在 Cangjie 中,区间表示一个具有固定步长的数值序列,常用于遍历、计数和范围判断。区间类型是泛型类型,使用 Range 表示。T 是可以支持关系操作符,并且可以和 Int64 类型值进行加法的类型。常见的 Range 用于表示整数区间。

区间实例通常包含三个主要属性:startendstep。其中,startend 表示序列的起始值和结束值,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 到 2

for (i in rangeA) {
    println(i)
}
println('')

for (i in rangeB) {
    println(i)
}

输出:

1
2
3
4
5
6

5
4
3
2

二、区间类型字面量

Cangjie 提供两种区间字面量格式:左闭右开左闭右闭

  1. 左闭右开:格式为 start..end : step,表示从 start 开始,以 step 为步长,直到不包含 end 的序列。
  2. 左闭右闭:格式为 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
6

3
5
7

8
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
9

10
9
8
7
6

(空区间)

三、区间的访问

区间可用于遍历、计数等操作,尤其适用于循环和条件判断。Cangjie 中不支持直接调用 containsreversed 方法,因此我们可以使用循环进行值判断。

示例:使用循环判断值是否在区间内:

let range = 0..15 : 3
let target = 9
var found = false
for (num in range) {
    if (num == target) {
        found = true
        break
    }
}
println("是否包含 9: ${found}")  // 输出: 是否包含 9: true

输出:

是否包含 9: true

四、区间的常见操作

Cangjie 提供多种区间操作,便于区间范围的管理和判断:

  1. 遍历区间:区间支持使用 for 循环进行遍历。
  2. 反向区间:可以通过自定义递减步长来实现反向区间遍历。

示例

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 = 1

for (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 = true
        break
    }
}

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 來源:坚果派 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


收藏00

登录 后评论。没有帐号? 注册 一个。