目录
在编程时,需要存储并操作同类型的一组数据,这是之前学习的基本数据类型已经无法满足这种需求了,为了方便程序可以存储并操作同类型的一组数据,仓颉提供了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集合的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉服务端开发有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!