容器 - inline-function/Sublimation GitHub Wiki
容器
凝华内置一套纯函数式容器库(stdlib/ 自动挂载):不可变、方法链、跨模块直接可用。
清单
| 容器 | 说明 |
|---|---|
List[T] |
有序列表,数组形态 |
Set[T] |
无序集合(结构枚举 SetCons) |
Map[K, V] |
键值对(结构枚举 MapCons) |
Optional[T] |
可空(见《空安全》) |
Result[T, E] |
成功/失败(Ok / Err) |
元组 (A, B) |
固定多值 |
构造
var xs = listOf(1, 2, 3) // List
var ys = emptyList[Nat]() // 空 List
var s = setOf(1, 2, 3) // Set
var m = mapEmpty[Str, Nat]() // 空 Map
m = m.put("a", 1).put("b", 2) // 不可变:put 返回新 Map
var m2 = toMap(listOf(("a", 1), ("b", 2))) // 从元组列表建 Map
列表常用方法
xs.map({ v -> v + 1 }) // [2, 3, 4]
xs.filter({ v -> v > 1 }) // [2, 3]
xs.fold(0, { (acc, v) -> acc + v }) // 6
xs.size() // 3
xs.isEmpty() // false
xs.head() / xs.last() // Optional
xs.reverse() // 反转
xs.take(2) / xs.drop(1) // 取/丢
xs.distinct() // 去重
xs.count({ v -> v > 1 }) // 计数
xs.any({ v -> v > 2 }) / xs.all({ v -> v > 0 })// 存在/全部
xs.zip(ys) // 拉链
xs.joinToString("-") // "1-2-3"
xs.sum() // 6(仅 List[Nat])
xs.maxNat() / xs.minNat() // Optional
xs.sortBy({ a, b -> a < b }) // 排序
Set / Map 常用方法
s.add(4) / s.remove(1) // 增删(返回新 Set)
s.contains(2) // true
s.union(other) / s.intersect(other) // 并/交
s.toList() // 转 List
m.get("a") // Some(1)
m.containsKey("a") // true
m.remove("a") // 删除(返回新 Map)
m.keys() / m.values() // List
m.size() // 键数
Result(错误处理)
var r: Result[Nat, Str] = Ok(42)
r.isOk() // true
r.isErr() // false
r.unwrapOr(0) // 42
r.map({ v -> v + 1 }) // Ok(43)
r.mapErr({ e -> "E:" + e }) // 转换错误
Collection 类型类
List/Set/Map 都实现 Collection,共享 size()/isEmpty()/contains(...) 统一接口。
一句话
容器全程不可变:put/add/remove 都返回新容器,原容器不变。推荐链式写法 xs.map(...).filter(...)。