当前位置: 首页 > article >正文

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

本篇将介绍 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/thread?topicId=232
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



http://www.kler.cn/a/407259.html

相关文章:

  • 电子应用设计方案-19:智能云饭锅系统方案设计
  • 修改一下达梦disql 提示符
  • Android Framework AudioFlinge 面试题及参考答案
  • GitLab|数据迁移
  • 使用pandoc将latex转换成word(带参考文献)
  • nvm安装node遇到的若干问题(vscode找不到npm文件、环境变量配置混乱、npm安装包到D盘)
  • CSS3_媒体查询(十一)
  • WPF触发器
  • 组合模式和适配器模式的区别
  • C++练级计划->《海量数据处理》面试题
  • 力扣面试经典 150(上)
  • 【MATLAB源码-第221期】基于matlab的Massive-MIMO误码率随着接收天线变化仿真,对比ZF MMSE MRC三种检测算法。
  • oracle查看锁阻塞-谁阻塞了谁
  • 【SLAM文献阅读】基于概率模型的视觉SLAM动态检测与数据关联方法
  • go 结构体方法
  • Ubuntu下安装Qt
  • 工程企业需要什么样的物资管理系统?为什么需要物资管理系统?
  • LWE详细介绍
  • 网络安全的学习方向和路线是怎么样的?
  • 【AIGC】大模型面试高频考点-RAG篇
  • 深度学习:神经网络的搭建
  • Python实现随机分布式延迟PSO优化算法(RODDPSO)优化CNN回归模型项目实战
  • Android学生信息管理APP的设计与开发
  • Webpack 热更新(HMR)详解:原理与实现
  • 学习嵩山版《Java 开发手册》:编程规约 - 命名风格(P1 ~ P2)
  • 如何进行Apache的配置与调试?