「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 到 2for (i in rangeA) {println(i)
}
println('')for (i in rangeB) {println(i)
}

输出:

1
2
3
4
5
65
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
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 中不支持直接调用 containsreversed 方法,因此我们可以使用循环进行值判断。

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

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 提供多种区间操作,便于区间范围的管理和判断:

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/477332.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

neo4j图数据库community-5.50创建多个数据库————————————————

1.找到neo4J中的conf文件&#xff0c;我的路径是&#xff1a;D:\Program Files\neo4j-community-5.5.0-windows\neo4j-community-5.5.0\conf 这里找自己的安装路径&#xff0c; 2.用管理员模式打开conf文件&#xff0c;右键管理员&#xff0c;记事本或者not 3.选中的一行新建一…

AVL树实现

1. AVL的概念 AVL树是最先发明的⾃平衡⼆叉查找树&#xff0c;AVL是⼀颗空树&#xff0c;或者具备下列性质的⼆叉搜索树&#xff1a;它的 左右⼦树都是AV树&#xff0c;且左右⼦树的⾼度差的绝对值不超过1。AVL树是⼀颗⾼度平衡搜索⼆叉树&#xff0c; 通过控制⾼度差去控制平…

jvm发展历程介绍

初始阶段&#xff1a;JDK 1.0 - JDK 1.1 • 经典JVM&#xff1a;这是JVM的早期实现&#xff0c;主要特点是使用解释器&#xff08;Interpreter&#xff09;来逐行解释执行Java字节码。这种方式虽然简单直接&#xff0c;但执行效率相对较低。 • JIT编译器&#xff08;Just-In-T…

准备阶段 Profiler性能分析工具的使用(一)

Unity 性能分析器 (Unity Profiler) 性能分析器记录应用程序性能的多个方面并显示相关信息。使用此信息可以做出有关应用程序中可能需要优化的事项的明智决策&#xff0c;并确认所做的优化是否产生预期结果。 默认情况下&#xff0c;性能分析器记录并保留游戏的最后 300 帧&a…

初学 flutter 环境变量配置

一、jdk&#xff08;jdk11&#xff09; 1&#xff09;配置环境变量 新增&#xff1a;JAVA_HOMEC:\Program Files\Java\jdk-11 //你的jdk目录 在path新增&#xff1a;%JAVA_HOME%\bin2&#xff09;验证是否配置成功&#xff08;cmd运行命令&#xff09; java java -version …

HTML 元素类型介绍

目录 1. 块级元素&#xff08;Block-level Elements&#xff09; 2. 行级元素&#xff08;Inline Elements&#xff09; 3. 行内块级元素&#xff08;Inline-block Elements&#xff09; 4. 表格相关元素 5. 列表相关元素 6. 表单相关元素 示例代码 示例效果 ​编辑 …

高危,Laravel参数注入漏洞安全风险通告

今日&#xff0c;亚信安全CERT监控到安全社区研究人员发布安全通告&#xff0c;披露了Laravel 参数注入漏洞(CVE-2024-52301)。在受影响的版本中&#xff0c;Application.php 文件的 detectEnvironment 函数直接使用了 $_SERVER[argv]&#xff0c;但没有检查运行环境是否为 CLI…

表格数据处理中大语言模型的微调优化策略研究

论文地址 Research on Fine-Tuning Optimization Strategies for Large Language Models in Tabular Data Processing 论文主要内容 这篇论文的主要内容是研究大型语言模型&#xff08;LLMs&#xff09;在处理表格数据时的微调优化策略。具体来说&#xff0c;论文探讨了以下…

如何搭建C++环境--1.下载安装并调试Microsoft Visual Studio Previerw(Windows)

1.首先&#xff0c;打开浏览器 首先&#xff0c;搜索“Microsoft Visual Studio Previerw” 安装 1.运行VisualStudioSetup (1).exe 无脑一直点继续 然后就到 选择需要的语言 我一般python用pycharm Java&#xff0c;HTML用vscode&#xff08;Microsoft Visual Studio cod…

数字化工厂 MES试点方案全解析(二)

生产过程监控与数据采集 在生产线上部署各类传感器、数据采集终端等设备&#xff0c;与 MES 系统相连&#xff0c;实时采集生产数据&#xff0c;如设备运行参数&#xff08;温度、压力、转速等&#xff09;、产品加工数据&#xff08;尺寸、重量、加工时间等&#xff09;、物料…

TCP vs UDP:如何选择适合的网络传输协议?

在网络通信中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff09;和UDP&#xff08;User Datagram Protocol&#xff09;是两种非常重要的传输层协议。它们各有特点&#xff0c;适用于不同类型的应用场景。本文将详细探讨TCP和UDP协议的结构、优缺点及应用&…

Redis最终篇分布式锁以及数据一致性

在前三篇我们几乎说完了Redis的所有的基础知识以及Redis怎么实现高可用性,那么在这一篇文章中的话我们主要就是说明如果我们使用Redis出现什么问题以及解决方案是什么,这个如果在未来的工作中也有可能会遇到,希望对看这篇博客的人有帮助,话不多说直接开干 一.Hotkey以及BigKey…

docker搭建私有的仓库

docker搭建私有仓库 一、为什么要搭建私有的仓库&#xff1f; 因为在国内&#xff0c;访问&#xff1a;https://hub.docker.com/ 会出现无法访问页面。。。。&#xff08;已经使用了魔法&#xff09; 当然现在也有一些国内的镜像管理网站&#xff0c;比如网易云镜像服务、Dao…

1123--日期类

目录 一 java 1. Date类 2. calendar类 3. 第三代日期类‘ 3.1 常用方法 3.2 格式化操作 一 java 1. Date类 2. calendar类 3. 第三代日期类‘ 3.1 常用方法 3.2 格式化操作

07-Making a Bar Chart with D3.js and SVG

课程链接 Curran的课程&#xff0c;通过 D3.js 的 scaleLinear, max, scaleBand, axisLeft, axisBottom&#xff0c;根据 .csv 文件生成一个横向柱状图。 【注】如果想造csv数据&#xff0c;可以使用通义千问&#xff0c;关于LinearScale与BandScale不懂的地方也可以在通义千…

mysql根据日期查询没有的日期也要显示数据

先查询出日期数据(当前日期往前推12个月) select bb.datefrom (select num : num 1,date_format(adddate(date_sub(date_sub(curdate(),interval 12 month),interval 1 month),interval num month), %Y-%m) as datefrom mysql.help_topic,(select num : 0) as twhere addd…

计算机网络 实验六 组网实验

一、实验目的 通过构造不同的网络拓扑结构图并进行验证&#xff0c;理解分组转发、网络通信及路由选择的原理&#xff0c;理解交换机和路由器在子网划分中的不同作用。 二、实验原理 组网实验是指将多个计算机通过网络连接起来&#xff0c;实现数据的共享和通信。 组网需要考虑…

10-单表查询

SQL语言 sql语言分类 SQL类别主要动作DQL(Data Query Language)SELECT(通常与FROM、WHERE、GROUP BY、HAVING、ORDER BY等组合使用)&#xff0c;用作数据chaxunDMLINSERT、UPDATE和DELETE&#xff0c;用作定义数据库记录(数据)TCLCOMMIT、ROLLBACK、SAVEPOINT、SET TRANSACTI…

深度学习每周学习总结J6(ResNeXt-50 算法实战与解析 - 猴痘识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结ResNeXt基本介绍 1. 设置GPU2. 导入数据及处理部分3. 划分数据集4. 模型构建部分5. 设置超参数&#xff1a;定义损失函数&…

采用python3.12 +django5.1 结合 RabbitMQ 和发送邮件功能,实现一个简单的告警系统 前后端分离 vue-element

一、开发环境搭建和配置 #mac环境 brew install python3.12 python3.12 --version python3.12 -m pip install --upgrade pip python3.12 -m pip install Django5.1 python3.12 -m django --version #用于检索系统信息和进程管理 python3.12 -m pip install psutil #集成 pika…