Skip to content

std.fmap

tier: alloc

FMap[V]:Str 键哈希映射(开放寻址,定容 256 槽,线性探查) 哈希 = djb2 mod 100003(全程 < 2^31,不触 eval 乘法溢出守卫,双面精确一致); 槽位 = 哈希 % 256。 函数式 API(fput 返回新映射,镜像 eval 结构体读即深克隆的语义锚)。 vals 追加式增长(slots 存索引,-1 空)规避泛型 V 零值构造。 命名 f 前缀:use 合并单一命名空间,避免与 std.map 的 put/get/has 撞名 (同名 decl 首个胜出 = 静默遮蔽,见 HANDOFF §4)。 v0:无删除;满表(256 键)fput 原样返回。迭代序 = 插入序(fwords),确定性。

pub fn

Signature Returns Description
fnew[V]() FMap[V] 空映射(256 槽全 -1 空;vals 空 List 规避泛型零值构造)
fidx(s: Str) I32 djb2 mod 100003 → 槽位 0..255
fslot[V](m: FMap[V], k: Str) I32 键 → vals 索引;不存在返回 -1(至多探查 256 步)
fput[V](m: FMap[V], k: Str, v: V) FMap[V] 覆盖写:键存在则替换值;否则探测空槽插入;满表原样返回
fget[V](m: FMap[V], k: Str, dft: V) V 取值:键不存在返回 dft
fhas[V](m: FMap[V], k: Str) Bool 键存在判定(经 fslot;O(1) 探查)
flen[V](m: FMap[V]) I32 键数(替换不增长,即 keys.len)
fwords[V](m: FMap[V]) List[Str] 词表(插入序;供迭代:配合 fget 逐键取值)
fvals[V](m: FMap[V]) List[V] 值表(插入序,与 fwords 一一对应)
fdel[V](m: FMap[V], k: Str) FMap[V] 删除键:不存在时原样返回