بنقرة واحدة
cangjie-std-array
仓颉标准库 Array 类型详细指南。当需要了解 Array 的构造、元素访问、切片、拼接、查找、排序、拷贝、反转、映射、扁平化等操作的完整 API 和用法时,应使用此 Skill。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
仓颉标准库 Array 类型详细指南。当需要了解 Array 的构造、元素访问、切片、拼接、查找、排序、拷贝、反转、映射、扁平化等操作的完整 API 和用法时,应使用此 Skill。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
当需要构建鸿蒙应用项目时,使用此 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。
| 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)