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

「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 = 3

if (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}") // 输出: 第一个元素: 1

println(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 = 0

for (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.kler.cn/a/411445.html

相关文章:

  • Mongo数据库 --- Mongo Pipeline
  • 二,[ACTF2020 新生赛]Include1感谢 Y1ng 师傅供题。
  • 树莓派2装FreeBSD14.1 Raspberry Pi2 install FreeBSD14.1 00000121:error:0A000086:SSL
  • Python酷库之旅-第三方库Pandas(237)
  • Large Spatial Model:End-to-end Unposed Images to Semantic 3D 论文解读
  • C#构建一个简单的前馈神经网络
  • 【论文解读】CVPR 2024 DSL-FIQA :全新人脸面部图像质量评估算法(附论文地址)
  • HPA - k8s自动伸缩机制
  • 2024年11月26日Github流行趋势
  • 推荐一款龙迅HDMI2.0转LVDS芯片 LT6211UX LT6211UXC
  • 1 ISP一键下载
  • ffmpeg 生成白噪声,粉噪声,棕噪声,蓝噪声,紫噪声,丝绒噪声
  • SVG无功补偿装置MATLAB仿真模型
  • java虚拟机——频繁发生Full GC的原因有哪些?如何避免发生Full GC
  • 快速理解微服务中Fegin的概念
  • 241126学习日志——[CSDIY] [ByteDance] 后端训练营 [19]
  • 【Linux】线程同步与互斥
  • 代码随想录算法训练营第五十五天|Day55 图论
  • 第三届航空航天与控制工程国际 (ICoACE 2024)
  • C语言实现冒泡排序:从基础到优化全解析
  • 电话机器人是什么?
  • node.js @ffmpeg-installer/ffmpeg 桌面推流
  • 安装 electron 依赖报错
  • Flutter 3.24.5安装配置——2024年11月26日
  • OpenCV从入门到精通实战(五)——dnn加载深度学习模型
  • 股指期货交割日为啥会大跌?