跟我一起学“仓颉”编程语言-Array数组

目录

一、Array的创建

二、Array的获取

三、Array的修改

四、小结


在编程时,需要存储并操作同类型的一组数据,这是之前学习的基本数据类型已经无法满足这种需求了,为了方便程序可以存储并操作同类型的一组数据,仓颉提供了4种Collection类型:Array、ArrayList、HashSet、HastMap,这些类型都是引用类型。

一、Array的创建

Array数组,用于存储相同数据类型的有序序列的数据,并且一旦初始化后,它的长度就固定下来了,不能对其进行新增和删除的操作。

package Study
 
main() {
    // 通过[] 赋值来创建数组
    let arr1: Array<Int64> = [2, 4, 1, 4, 0]
    println(arr1)
 
    // 通过构造函数来创建 3表示长度,repeat表示数组的元素
    let arr2 = Array<Int64>(3, repeat: 0)
    println(arr2)
 
    // 通过尾随lambda表达式创建 3表示长度
    let arr3 = Array<Int64>(3) {index => index}
    println(arr3)
}

二、Array的获取

判断Array是否为空

package Study

main() {
    let array1 = [1,2,3,4,5]
    println(array1.isEmpty())
}

获取Array的长度

package Study

main() {
    let arr1: Array<Int64> = [2, 4, 1, 4, 0]
    println(arr1.size)
}

获取单个元素

package Study

main() {
    let arr1: Array<Int64> = [2, 4, 1, 4, 0]
    println(arr1[0])
    println(arr1[2])
    println(arr1[arr1.size - 1])
}

注意:还可以通过get函数来获取单个元素,但是get函数返回的是Option<T>类型,需要对返回值进行解构。

package Study

main() {
    let arr1: Array<Int64> = [2, 4, 1, 4, 0]
    println(arr1.get(0))
    println(arr1.get(0).getOrThrow())
}

注意:在解构get函数的结果时,注意数组越界的问题。

获取部分元素

利用区间类型,进行切片获取

package Study

main() {
    let arr1: Array<Int64> = [2, 4, 1, 4, 0]
    // 取[0, 2)的所有元素,2位置元素取不到
    println(arr1[..2])
    // 取下标2之后的所有元素
    println(arr1[2..])
    // 取[1, 4]的所有元素
    println(arr1[1..=4])
    // 取所有元素
    println(arr1[..])
}

注意:这里的区间类型的步长(step)必须为1。

通过slice函数

package Study

main() {
    let arr1: Array<Int64> = [2, 4, 1, 4, 0]
    // 取[1, 3]所有的元素 1表示下标为1,3表示长度,即:从下标为1处,取3个元素
    println(arr1.slice(1, 3))
}

循环输出数组元素

package Study

main() {
    let arr1: Array<Int64> = [2, 4, 1, 4, 0]
    for (i in 0..arr1.size) {
        println(arr1[i])
    }

    println()
    // 增强for循环
    for (item in arr1) {
        println(item)
    }
}

判断Array数组中是否包含指定元素

package Study

main() {
    let arr1: Array<Int64> = [2, 4, 1, 4, 0]
    println(arr1.contains(1))
    println(arr1.contains(5))
}

三、Array的修改

修改单个元素

package Study

main() {
    let arr1: Array<Int64> = [2, 4, 1, 4, 0]
    arr1[arr1.size - 1] = 5
    println(arr1[arr1.size - 1])
}
package Study

main() {
    let arr1: Array<Int64> = [2, 4, 1, 4, 0]
    println(arr1)
    // 将下标为2的元素修改成 5
    arr1[2] = 5
    println(arr1)
}

Array数组的赋值

package Study

main() {
    let arr1: Array<Int64> = [2, 4, 1, 4, 0]
    var arr2: Array<Int64> = arr1
    println(arr1)
    println(arr2)
    println()
    arr2[0] = 9
    // 因为Array数组是引用类型,修改arr2的元素,会影响到arr1
    println(arr1)
    println(arr2)

    // 正确做法 使用clone方法
    println()
    arr2 = arr1.clone()
    arr2[0] = 6
    println(arr1)
    println(arr2)

    // 获取部分元素
    let arr3 = arr1.clone(1..4)
    println(arr3)
}

注意:Collection类型是引用类型,因此,Array、ArrayList、HashSet、HashMap都可以用clone方法。

四、小结

本章为大家详细的介绍了仓颉编程语言中Array数组的内容,下一章,为大家带来ArrayList集合的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉服务端开发有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

### 关于仓颉编程语言中的二维数组仓颉编程语言中,虽然具体的语法可能与其他主流语言有所不同,但由于其设计目标是提供友好的开发体验和卓越的程序性能[^3],可以推测它对于多维数组的支持也遵循类似的逻辑。 #### 创建二维数组的方法 创建二维数组可以通过嵌套的方式完成。以下是基于已知信息的一种实现方式: 1. **定义大小并初始化** 可以先声明一个外层数组,再为其每个元素赋值为内层数组。例如,在仓颉编程语言中可能会有如下形式: ```csharp int n = 5; // 行数 int m = 4; // 列数 var data = new Array<Array<int>>(n); for (int i = 0; i < n; ++i) { data[i] = new Array<int>(m); // 初始化每一行为长度为 m 的数组 } ``` 这里 `data` 是一个二维数组,其中每行是一个固定大小的一维数组。这种做法类似于其他高级语言中的动态分配机制[^1]。 2. **利用类型推断简化代码** 如果编译器能够根据上下文自动推断类型的特性被保留,则可以直接省略显式的类型标注[^2]。例如: ```csharp var data = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; ``` 此处无需指定数据的具体类型,因为编译器可以从初始值列表中推导出它是整型二维数组。 3. **访问与修改元素** 访问或修改某个特定位置上的值非常直观,只需按照索引来操作即可。比如设置第 i 行 j 列的数值为 x: ```csharp data[i][j] = x; ``` #### 性能考虑 由于仓颉强调高性能运行时环境的设计理念,因此当处理大规模矩阵运算时应特别注意内存布局的影响。通常情况下,连续存储同一维度的数据有助于提高缓存命中率从而加速计算过程。 ```python def example(): rows = 3 cols = 4 # Initialize a two-dimensional array with zeros. matrix = [[0]*cols for _ in range(rows)] return matrix ``` 上述 Python 示例展示了如何构建一个由零填充的矩形网格结构;尽管这不是直接针对仓颉语法规则编写的内容,但它体现了通用原则——即通过列表解析表达式快速生成所需形状的对象集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学徒钝子生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值