ワンクリックで
cangjie-collections
仓颉语言集合类型。当需要了解仓颉语言的Array、ArrayList、HashMap、HashSet集合类型的构造、访问、修改、引用语义,以及Iterable/Iterator接口和for-in迭代机制时,应使用此 Skill。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
仓颉语言集合类型。当需要了解仓颉语言的Array、ArrayList、HashMap、HashSet集合类型的构造、访问、修改、引用语义,以及Iterable/Iterator接口和for-in迭代机制时,应使用此 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。
仓颉标准库 Array 类型详细指南。当需要了解 Array 的构造、元素访问、切片、拼接、查找、排序、拷贝、反转、映射、扁平化等操作的完整 API 和用法时,应使用此 Skill。
| name | cangjie-collections |
| description | 仓颉语言集合类型。当需要了解仓颉语言的Array、ArrayList、HashMap、HashSet集合类型的构造、访问、修改、引用语义,以及Iterable/Iterator接口和for-in迭代机制时,应使用此 Skill。 |
仓颉提供 4 种核心集合类型:
| 类型 | 可修改元素 | 增删 | 唯一元素 | 有序 |
|---|---|---|---|---|
Array<T> | ✅ | ❌ | ❌ | ✅ |
ArrayList<T> | ✅ | ✅ | ❌ | ✅ |
HashSet<T> | ❌ | ✅ | ✅ | ❌ |
HashMap<K, V> | V: ✅ | ✅ | K: ✅ | ❌ |
导入:import std.collection.*
类型:ArrayList<T> — T 可为任意类型。引用类型
ArrayList<String>() // 空
ArrayList<String>(100) // 空,预分配容量 100
ArrayList<Int64>([0, 1, 2]) // 从 Array 字面量
ArrayList<Int64>(otherCollection) // 从另一个 Collection
ArrayList<String>(2, {x: Int64 => x.toString()}) // size=2,lambda 初始化
for (i in list) { ... }list.sizelist[0]、list[1] — 索引须为 Int64,从 0 开始。负数或越界 → 运行时异常list[0] = 3let list2 = list1 — 共享数据;通过任一引用的修改均可见list.add(element)list.add(all: someCollection)list.add(element, at: index) / list.add(all: collection, at: index)list.remove(at: index)ArrayList<Int64>(100) 或 list.reserve(100) 以避免重复重分配导入:import std.collection.*
类型:HashMap<K, V> — K 须实现 Hashable 和 Equatable<K>。V 可为任意类型。引用类型
HashMap<String, Int64>() // 空
HashMap<String, Int64>([("a", 0), ("b", 1), ("c", 2)]) // 从元组数组
HashMap<String, Int64>(otherHashMap) // 从另一个 Collection
HashMap<String, Int64>(10) // 空,容量 10
HashMap<Int64, Int64>(10, {x: Int64 => (x, x * x)}) // size=10,lambda 初始化
for ((k, v) in map) { ... } — 顺序不保证map.sizemap.contains("a") → Boolmap["a"] — 键须存在否则运行时异常map["a"] = 3map["d"] = 3map.add("a", 0) — 键已存在时覆盖旧值,返回 Option<V>(旧值或 None)map.add(all: otherMap)map.remove("d")导入:import std.collection.*
类型:HashSet<T> — T 须实现 Hashable 和 Equatable<T>。引用类型。元素一旦存储不可修改
HashSet<String>() // 空
HashSet<String>(100) // 空,容量 100
HashSet<Int64>([0, 1, 2]) // 从 Array 字面量
HashSet<Int64>(otherCollection) // 从另一个 Collection
HashSet<Int64>(10, {x: Int64 => (x * x)}) // size=10,lambda 初始化
for (i in mySet) { ... } — 顺序不保证mySet.sizemySet.contains(0) → BoolmySet.add(0) — 元素已存在时无效果(去重)mySet.add(all: someArray)mySet.remove(1) — 按元素值删除Iterable<T> 接口interface Iterable<T> {
func iterator(): Iterator<T>
}
Iterator<T> 接口interface Iterator<T> <: Iterable<T> {
mut func next(): Option<T>
}
Iterator 自身扩展 Iterablenext() 返回 Option<T> — Some(value) 或 None 表示结束for (i in list) { println(i) }
等价于:
var it = list.iterator()
while (true) {
match (it.next()) {
case Some(i) => println(i)
case None => break
}
}
所有四种集合类型 — Array、ArrayList、HashSet、HashMap — 均实现 Iterable。自定义类型也可实现 Iterable 以获得 for-in 支持
| 规则 | 说明 |
|---|---|
| 类型安全 | 不同元素类型的集合不兼容 |
| 引用语义 | ArrayList、HashSet、HashMap 为引用类型 — 赋值创建别名。Array 虽为 struct 类型,但赋值也共享底层数据 |
| 泛型约束 | HashSet 的 T 和 HashMap 的 K 须实现 Hashable + Equatable。ArrayList 的 T 和 HashMap 的 V 无约束 |
| 有序性 | Array 和 ArrayList 有序(有索引)。HashSet 和 HashMap 无序 |
| 下标访问 | Array/ArrayList:Int64 索引。HashMap:键。HashSet:无 |
| 越界/缺失键 | 无效索引或缺失键导致运行时异常 |
| 容量预分配 | ArrayList 和 HashSet 支持构造函数中的容量提示 |
| Lambda 初始化 | 所有类型支持 (size, lambda) 构造函数 |
| 迭代 | 所有类型通过 Iterable<T> 接口支持 for-in |