容器 - 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(...)。