원클릭으로
cangjie-std-array
仓颉标准库 Array 类型详细指南。当需要了解 Array 的构造、元素访问、切片、拼接、查找、排序、拷贝、反转、映射、扁平化等操作的完整 API 和用法时,应使用此 Skill。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
仓颉标准库 Array 类型详细指南。当需要了解 Array 的构造、元素访问、切片、拼接、查找、排序、拷贝、反转、映射、扁平化等操作的完整 API 和用法时,应使用此 Skill。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | cangjie-std-array |
| description | 仓颉标准库 Array 类型详细指南。当需要了解 Array 的构造、元素访问、切片、拼接、查找、排序、拷贝、反转、映射、扁平化等操作的完整 API 和用法时,应使用此 Skill。 |
Array<T> 是仓颉核心包 std.core 中的 struct 类型,无需导入 即可直接使用。
let arr2 = arr1 后两者共享底层存储,修改会互相可见T 可以是任意类型// 字面量构造(最常用)
let arr = [1, 2, 3, 4, 5]
// 空数组
let empty = Array<Int64>()
// 指定大小 + 重复值
let zeros = Array<Int64>(5, repeat: 0) // [0, 0, 0, 0, 0]
// 指定大小 + 初始化函数
let arr2 = Array<Int64>(5, {i => i * 2}) // [0, 2, 4, 6, 8]
| 构造函数 | 说明 |
|---|---|
init() | 创建空数组 |
init(size: Int64, repeat!: T) | 创建指定大小数组,所有元素为 repeat 值 |
init(size: Int64, initElement: (Int64) -> T) | 创建指定大小数组,元素由函数生成 |
size < 0 时抛出 NegativeArraySizeException| 属性 | 类型 | 说明 |
|---|---|---|
size | Int64 | 元素个数(通过 Collection 扩展提供) |
first | Option<T> | 首元素,空数组返回 None |
last | Option<T> | 尾元素,空数组返回 None |
let arr = [10, 20, 30]
println(arr.size) // 3
println(arr.first) // Some(10)
println(arr.last) // Some(30)
let empty = Array<Int64>()
println(empty.first) // None
let arr = [10, 20, 30]
let v = arr[0] // 10
arr[2] = 99 // [10, 20, 99]
0 开始,类型为 Int64IndexOutOfBoundsExceptiongetfunc get(index: Int64): Option<T>
let arr = [10, 20, 30]
arr.get(1) // Some(20)
arr.get(10) // None(不抛异常)
swapfunc swap(i: Int64, j: Int64): Unit
var arr = [1, 2, 3]
arr.swap(0, 2) // [3, 2, 1]
let arr = [0, 1, 2, 3, 4, 5]
let sub = arr[1..4] // [1, 2, 3](引用,非拷贝)
let sub2 = arr[2..=4] // [2, 3, 4](闭区间)
注意:范围下标返回的是原数组的引用切片,修改会反映到原数组。
var arr = [0, 1, 2, 3, 4, 5]
arr[1..3] = [10, 11] // [0, 10, 11, 3, 4, 5]
slice — 获取切片func slice(start: Int64, len: Int64): Array<T>
let arr = [0, 1, 2, 3, 4]
let s = arr.slice(1, 3) // [1, 2, 3](从索引 1 开始取 3 个元素,引用)
splitAt — 在指定位置分割func splitAt(index: Int64): (Array<T>, Array<T>)
let arr = [0, 1, 2, 3, 4]
let (left, right) = arr.splitAt(2) // left=[0, 1], right=[2, 3, 4]
concat — 拼接func concat(other: Array<T>): Array<T>
let a = [1, 2]
let b = [3, 4]
let c = a.concat(b) // [1, 2, 3, 4]
repeat — 重复func repeat(times: Int64): Array<T>
let arr = [1, 2].repeat(3) // [1, 2, 1, 2, 1, 2]
clone — 深拷贝func clone(): Array<T>
func clone(range: Range<Int64>): Array<T>
let arr = [1, 2, 3]
let copy = arr.clone() // [1, 2, 3],独立副本
let partial = arr.clone(1..3) // [2, 3]
copyTo — 拷贝到目标数组func copyTo(dst: Array<T>): Unit
func copyTo(dst: Array<T>, srcStart: Int64, srcLen: Int64, dstStart: Int64): Unit
let src = [1, 2, 3]
let dst = Array<Int64>(5, repeat: 0)
src.copyTo(dst) // dst = [1, 2, 3, 0, 0]
src.copyTo(dst, 0, 2, 3) // dst = [1, 2, 3, 1, 2](从 src[0] 取 2 个放到 dst[3])
fill — 用指定值填充全部元素func fill(value: T): Unit
var arr = [1, 2, 3]
arr.fill(0) // [0, 0, 0]
reverse — 原地反转func reverse(): Unit
var arr = [1, 2, 3, 4, 5]
arr.reverse() // [5, 4, 3, 2, 1]
map — 元素映射func map<R>(transform: (T) -> R): Array<R>
let arr = [1, 2, 3]
let strs = arr.map { v => v.toString() } // ["1", "2", "3"]
let doubled = arr.map { v => v * 2 } // [2, 4, 6]
flatten — 扁平化二维数组// 仅对 Array<Array<T>> 可用
func flatten(): Array<T>
let arr2d = [[1, 2], [3, 4], [5]]
let flat = arr2d.flatten() // [1, 2, 3, 4, 5]
以下方法需要元素类型 T 实现 Equatable<T> 接口。
contains — 判断是否包含元素func contains(element: T): Bool
[1, 2, 3].contains(2) // true
[1, 2, 3].contains(5) // false
indexOf — 查找元素/子数组位置func indexOf(element: T): Option<Int64>
func indexOf(element: T, fromIndex: Int64): Option<Int64>
func indexOf(subArray: Array<T>): Option<Int64>
[10, 20, 30, 20].indexOf(20) // Some(1)
[10, 20, 30, 20].indexOf(20, 2) // Some(3) — 从索引 2 开始搜索
[1, 2, 3, 4].indexOf([2, 3]) // Some(1) — 子数组位置
[1, 2, 3].indexOf(99) // None
lastIndexOf — 查找最后出现位置func lastIndexOf(element: T): Option<Int64>
func lastIndexOf(subArray: Array<T>): Option<Int64>
[1, 2, 3, 2, 1].lastIndexOf(2) // Some(3)
removePrefix / removeSuffixfunc removePrefix(prefix: Array<T>): Array<T>
func removeSuffix(suffix: Array<T>): Array<T>
[1, 2, 3, 4].removePrefix([1, 2]) // [3, 4]
[1, 2, 3, 4].removeSuffix([3, 4]) // [1, 2]
[1, 2, 3].removePrefix([9, 8]) // [1, 2, 3](无匹配,返回原数组)
trimStart / trimEndfunc trimStart(elements: Array<T>): Array<T>
func trimStart(predicate: (T) -> Bool): Array<T>
func trimEnd(elements: Array<T>): Array<T>
func trimEnd(predicate: (T) -> Bool): Array<T>
[0, 0, 1, 2, 0].trimStart([0]) // [1, 2, 0]
[0, 0, 1, 2, 0].trimEnd([0]) // [0, 0, 1, 2]
[0, 1, 2, 3].trimStart { v => v < 2 } // [2, 3]
let a = [1, 2, 3]
let b = [1, 2, 3]
let c = [1, 2, 4]
a == b // true
a != c // true
func toString(): String
[1, 2, 3].toString() // "[1, 2, 3]"
func iterator(): Iterator<T>
func isEmpty(): Bool
func toArray(): Array<T>
let arr = [10, 20, 30]
// for-in 遍历
for (v in arr) {
println(v)
}
// 使用迭代器
var it = arr.iterator()
while (true) {
match (it.next()) {
case Some(v) => println(v)
case None => break
}
}
Array 本身不提供排序方法,需导入 std.sort:
import std.sort.*
var arr = [3, 1, 4, 1, 5, 9]
sort(arr) // 原地升序:[1, 1, 3, 4, 5, 9]
sort(arr) { a, b => b - a } // 自定义降序
// 1. 创建固定大小数组
let buffer = Array<Byte>(1024, repeat: 0)
// 2. 字面量 + 修改
var scores = [90, 85, 78]
scores[1] = 95
// 3. 遍历并映射
let names = ["Alice", "Bob"]
let upper = names.map { n => n.toAsciiUpper() }
// 4. 查找元素
if (let Some(idx) <- arr.indexOf(target)) {
println("Found at ${idx}")
}
// 5. 拼接数组
let combined = arr1.concat(arr2)
// 6. 二维数组扁平化
let matrix = [[1, 2], [3, 4]]
let flat = matrix.flatten() // [1, 2, 3, 4]
// 7. 拷贝后独立修改
let copy = arr.clone()
copy[0] = 999 // 不影响原数组
// 8. 分割数组
let (head, tail) = data.splitAt(3)
当需要构建鸿蒙应用项目时,使用此 Skill 执行构建流程。此 Skill 包含完整的构建命令、构建流程说明、构建失败处理流程。构建脚本会自动执行依赖安装、仓颉预编译、资源生成、编译、打包等步骤。
在鸿蒙应用(Cangjie)开发中,当需要使用 stdx 拓展库(如 crypto、encoding、net、log、actors 等),或在构建/链接阶段出现 stdx 相关错误时,使用此 Skill 获取/解压 stdx 包,并指导在 entry/cjpm.toml 中正确配置 bin-dependencies.path-option。
在进行仓颉工程或鸿蒙应用开发时的第一步,应该优先读取该SKILL,用来确定后续的开发步骤。
仓颉语言内置注解。当需要了解仓颉 SDK 提供的内置注解(@sourcePackage/@sourceFile/@sourceLine/@When/@FastNative/@Frozen/@Attribute/@Deprecated)的用途、语法和最优实践时,应使用此 Skill。
仓颉语言附录参考。当需要查阅仓颉语言的关键字列表、运算符优先级与结合性、运算符重载函数签名、运行时环境变量配置、包兼容性规则、TokenKind枚举类型时,应使用此 Skill。
仓颉标准库 ArrayList 类型详细指南。当需要了解 ArrayList 的构造、增删改查、容量管理、切片、排序、迭代、与 Array 互转等操作的完整 API 和用法时,应使用此 Skill。