「Mac玩转仓颉内测版29」基础篇9 - 数组类型详解

本篇将介绍 Cangjie 中的数组类型,包括数组的定义、创建、访问、常见操作以及在数据管理中的应用,帮助开发者熟练掌握数组的使用。


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

一、数组类型概述

在 Cangjie 中,数组是一种用于存储同类型数据的集合。数组中的元素按顺序排列,每个元素都有唯一的索引,索引从 0 开始。数组在处理大量数据时十分高效,适合用作列表、数据集等。

数组是一种引用类型,当你将一个数组赋值给另一个变量时,它们指向相同的内存地址。因此修改其中一个变量,会影响另一个。

示例

let numbers: Array<Int64> = [1, 2, 3, 4, 5]
println(numbers)

输出:

[1, 2, 3, 4, 5]

二、创建数组

可以使用方括号 [] 创建数组,并指定数组元素的类型。还可以创建空数组并在后续添加元素。需要注意的是,数组的长度在创建时是固定的,不能动态扩展或缩减。

示例

// 初始化带有元素的数组
let fruits: Array<String> = ["Apple", "Banana", "Cherry"]// 创建空数组
var emptyArray: Array<Int64> = []
println(fruits)
println(emptyArray)

输出:

["Apple", "Banana", "Cherry"]
[]

三、数组的访问

数组中的元素可以通过索引来访问。使用方括号 [] 指定索引值,即可访问或修改指定位置的元素。需要注意,访问数组时,索引必须在合法范围内(0 到 size-1),否则会抛出异常。

示例

let fruits: Array<String> = ["Apple", "Banana", "Cherry"]println("第一个元素: ${fruits[0]}")  // 输出: 第一个元素: Apple
println("第二个元素: ${fruits[1]}")  // 输出: 第二个元素: Banana

输出:

第一个元素: Apple
第二个元素: Banana

常见错误处理

let fruits: Array<String> = ["Apple", "Banana", "Cherry"]
let index: Int64 = 3if (index >= 0 && index < fruits.size) {println("第${index}个元素是${fruits[index]}")
} else {println("索引超出范围")
}

四、数组的常见操作

在 Cangjie 中,数组是固定长度的集合,因此不支持直接添加或删除元素的操作,但可以通过下标访问来修改数组中的元素。

  1. 修改数组元素:使用下标访问语法 [] 来直接修改指定位置的元素。
  2. 获取数组长度:使用 size 属性获取数组的元素个数。

示例

var numbers: Array<Int64> = [1, 2, 3, 4, 5]// 修改元素
numbers[0] = 10
println("修改后: ${numbers}") // 输出: 修改后: [10, 2, 3, 4, 5]// 获取数组长度
println("数组长度: ${numbers.size}") // 输出: 数组长度: 5

输出:

修改后: [10, 2, 3, 4, 5]
数组长度: 5

五、值类型数组 VArray

Cangjie 中的 VArray 是一种特殊的值类型数组,用于处理固定长度的数组。与普通数组不同,VArray 不允许在运行时修改其长度,且只能容纳值类型的元素。

  1. 通过重复值创建:使用 repeat 参数可以创建一个包含重复值的 VArray
  2. 通过初始化函数创建:使用初始化函数根据索引值创建数组的每个元素。

示例

// 创建一个包含6个元素的VArray,所有元素初始化为0
let repeatArray: VArray<Int64, $6> = VArray<Int64, $6>(repeat: 0)
println(repeatArray.size)// 使用初始化函数创建一个VArray,元素值为索引值
let initArray: VArray<Int64, $6> = VArray<Int64, $6>({ i => i + 1 })
for (i in 0..6) {println(initArray[i])
}

输出:

6
1
2
3
4
5
6

VArray 的访问

与普通数组类似,VArray 也可以通过下标语法访问和修改元素。其长度可以通过 size 属性获取。

var a: VArray<Int64, $3> = [1, 2, 3]
let firstElement = a[0] // 获取第一个元素
println("第一个元素: ${firstElement}") // 输出: 第一个元素: 1println(a[2]) // 输出: 3
a[2] = 5 // 修改第三个元素
println(a[2]) // 输出: 5

六、数组的应用场景

数组在 Cangjie 中广泛应用,适合存储和管理有序的数据,以下是一些典型应用场景:

6.1 数据列表

数组可以用于保存一系列信息,如商品名称、用户数据等。

示例

let scores: Array<Int64> = [85, 90, 78, 92, 88]
var total: Int64 = 0for (score in scores) {total += score
}let average: Float64 = Float64(total / scores.size)
println("平均分: ${average}")  // 输出: 平均分: 86.000000

输出:

平均分: 86.000000
6.2 批量操作

可以使用数组执行批量操作,例如遍历、筛选和统计。批量操作在处理大规模数据时尤为有用。


七、性能优化建议

在处理大量数据时,数组的性能优势明显。然而需要注意,频繁的数组操作可能会影响性能。因此,建议在需要动态增删元素时使用其他数据结构(如列表)。

对于固定大小的数据集,推荐使用 VArray,它是值类型数组,性能更加优越,适合需要高效数据访问的场景。

示例

let fixedArray: VArray<Int64, $5> = [1, 2, 3, 4, 5]
println(fixedArray[3]) // 输出: 4

小结

本篇介绍了 Cangjie 中的数组类型,涵盖了数组的定义、创建、访问、操作及应用场景,帮助开发者熟练掌握数组的基本用法和数据处理。特别是 VArray 作为值类型数组,适用于需要固定长度、高效数据访问的场景。


下篇预告

下一篇将介绍 Cangjie 的 区间类型,讲解区间的定义、操作方法及在数据遍历和判断中的应用,敬请关注 「Mac玩转仓颉内测版30」基础篇10 - 区间类型详解


上一篇: 「Mac玩转仓颉内测版28」基础篇8 - 元组类型详解
下一篇: 「Mac玩转仓颉内测版30」基础篇10 - 区间类型详解

作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=231
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


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

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

相关文章

[面试]-golang基础面试题总结

文章目录 panic 和 recover**注意事项**使用 pprof、trace 和 race 进行性能调试。**Go Module**&#xff1a;Go中new和make的区别 Channel什么是 Channel 的方向性&#xff1f;如何对 Channel 进行方向限制&#xff1f;Channel 的缓冲区大小对于 Channel 和 Goroutine 的通信有…

鸿蒙进阶-状态管理

大家好啊&#xff0c;这里是鸿蒙开天组&#xff0c;今天我们来学习状态管理。 开始组件化开发之后&#xff0c;如何管理组件的状态会变得尤为重要&#xff0c;咱们接下来系统的学习一下这部分的内容 状态管理机制 在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&a…

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

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

IDEA 2024.3 版本更新主要功能介绍

IDEA 2024.3 版本提供的新特性 IntelliJ IDEA 2024.3 的主要新特性&#xff1a; AI Assistant 增强 改进的代码补全和建议更智能的代码分析和重构建议Java 支持改进 支持 Java 21 的所有新特性改进的模式匹配和记录模式支持更好的虚拟线程调试体验开发工具改进 更新的 UI/UX 设…

java基础概念37:正则表达式2-爬虫

一、定义 【回顾】正则表达式的作用 作用一&#xff1a;校验字符串是否满足规则作用二&#xff1a;在一段文本中查找满足要求的内容——爬虫 二、本地爬虫VS网络爬虫 2-1、本地爬虫 示例&#xff1a; 代码优化&#xff1a; public static void main(String[] args) {// 大…

AmazonS3集成minio实现https访问

最近系统全面升级到https&#xff0c;之前AmazonS3大文件分片上传直接使用http://ip:9000访问minio的方式已然行不通&#xff0c;https服务器访问http资源会报Mixed Content混合内容错误。 一般有两种解决方案&#xff0c;一是升级minio服务&#xff0c;配置ssl证书&#xff0c…

JavaWeb——Mybatis

6. Mybatis MyBatis是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发 6.1. Mybatis入门 6.1.1. 入门程序 6.1.2. JDBC 6.1.3. 数据库连接池 6.1.4. Lombok 6.2. Mybatis基础操作 6.2.1. 删除 6.2.1.1. 根据主键删除 6.2.1.2. 预编译SQL #{id}在编译过程中会替换成?…

MongoDB数据备份与恢复(内含工具下载、数据处理以及常见问题解决方法)

一、工具准备 对MongoDB进行导入导出、备份恢复等操作时需要用到命令工具&#xff0c;我们要先检查一下MongoDB安装目录下是否有这些工具&#xff0c;正常情况下是没有的:)&#xff0c;因为新版本的MongoDB安装时不包含这些工具&#xff0c;需要我们手动下载安装。下载成功之后…

学习与理解LabVIEW中多列列表框项名和项首字符串属性

多列列表框控件在如下的位置&#xff1a; 可以对该控件右击&#xff0c;如下位置&#xff0c;即可设置该控件的显示项&#xff1a; 垂直线和水平线指的是上图中组成单元格的竖线和横线&#xff08;不包括行首列首&#xff09; 现在介绍该多列列表框的两个属性&#xff0c;分别…

【信息系统项目管理师】第2章:信息技术发展 考点梳理

文章目录 2.1 信息技术及其发展2.1.1 计算机软硬件2.1.2 计算机网络2.1.3 存储和数据库2.1.4 信息安全2.1.5 信息技术的发展 2.2 新一代信息技术及应用2.2.1 物联网2.2.2 云计算2.2.3 大数据2.2.4 区块链2.2.5 人工智能2.2.6 虚拟现实 2.1 信息技术及其发展 2.1.1 计算机软硬件…

《现代制造技术与装备》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《现代制造技术与装备》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第二批认定学术期刊。 问&#xff1a;《现代制造技术与装备》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;齐鲁工业大学&#xff0…

QT:QListView实现table自定义代理

介绍 QListVIew有两种切换形式&#xff0c;QListView::IconMode和QListView::ListMode&#xff0c;通过setViewMode()进行设置切换。因为QListView可以像QTreeView一样显示树形结构&#xff0c;也可以分成多列。这次目标是将ListView的ListMode形态显示为table。使用代理&…

统计学常用的分析方法:T检验

T检验是一种用于比较数据集均值差异的统计方法&#xff0c;包括单样本t检验、配对样本t检验和独立样本t检验&#xff0c;可通过MATLAB、Python和R等工具实现t检验。如果数据不符合正态分布&#xff0c;可考虑使用非参数分析&#xff0c;多余两组数据时&#xff0c;可采用多重比…

win10中使用ffmpeg和MediaMTX 推流rtsp视频

在win10上测试下ffmpeg推流rtsp视频&#xff0c;需要同时用到流媒体服务器MediaMTX 。ffmpeg推流到流媒体服务器MediaMTX &#xff0c;其他客户端从流媒体服务器拉流。 步骤如下&#xff1a; 1 下载MediaMTX github: Release v1.9.3 bluenviron/mediamtx GitHub​​​​​…

网络安全-web架构-nginx配置

1. nginx访问&#xff1a; 访问的是index.html&#xff0c; 访问ip访问的资源就是在/usr/share/nginx/html中&#xff1b; 当nginx不认识&#xff0c;浏览器认识的话&#xff0c;浏览器会自动渲染。 当nginx认识&#xff0c;浏览器不认识的话&#xff0c;浏览器会把它加载成…

Python + 深度学习从 0 到 1(00 / 99)

希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持&#xff01; ⭐ 什么是深度学习&#xff1f; 人工智能、机器学习与…

Chinese SimpleQA:包含3000个高质量问题,覆盖6个主要主题,每个主题下有99个细分主题,用来评估大型语言模型中文事实性能力的基准测试.

2024-11-12, 由阿里巴巴集团旗下的淘宝和天猫团队创建的Chinese SimpleQA数据集&#xff0c;是首个全面评估语言模型回答简短问题事实性能力的中文基准测试。该数据集的创建&#xff0c;为理解和提升大型语言模型在中文环境下的事实性回答能力提供了重要的工具和标准。 数据集…

Kafka 生产者优化与数据处理经验

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…

Python中Tushare(金融数据库)入门详解

文章目录 Python中Tushare&#xff08;金融数据库&#xff09;入门详解一、引言二、安装与注册1、安装Tushare2、注册与获取Token 三、Tushare基本使用1、设置Token2、获取数据2.1、获取股票基础信息2.2、获取交易日历2.3、获取A股日线行情2.4、获取沪股通和深股通成份股2.5、获…

shell第一次作业

要求&#xff1a; 通过shell脚本分析部署nginx网络服务 1.接收用户部署的服务名称 2.判断服务是否安装 ​ 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&#xff1b;重启服务 ​ 没有安装&#xff1b;安装对应的软件包 3.测试 判断服务是…