stringUtil.lua 中提供的接口 ============ 接口设计参考 redis 方式 针对 "K1=V1 K2=V2 ... Kn=Vn" 结构的CRUD(增删改查)操作 K1~Kn是唯一的;K1~Kn,V1~Vn都为整数,不可为浮点数 setv 操作为修改 k 的值 v,若不存在 k 则将k=v附在字符串末尾 string.setv(str, k, v, delimiter) msetv 操作为修改 {[k1]=v1, [k2]=v2, ..., [kn]=vn} 中对应的kv值,若字符串中不包含则以 k=v 的形式附在末尾 string.msetv(str, vs, delimiter) incrv 操作为修改 k 对应的值 +delta,若字符串中不包含则以 k=delta 的形式附在末尾 string.incrv(str, k, delta, delimiter) mincrv 操作为修改 {[k1]=d1, [k2]=d2, ..., [kn]=dn} 中对应的k 是与之对应的 v+d,若字符串中不包含则以 k=d 的形式附在末尾 string.mincrv(str, ds, delimiter) delk 操作为 删除字符串中 包含k 的k=v结构, 若不存在则跳过 string.delk(str, k, delimiter) mdelk 操作为 删除字符串中 包含 {k1, k2, ..., kn} 中任意元素的结构,若不存在则跳过 string.mdelk(str, ks, delimiter) getv 操作为 获取字符串中 包含 k 中的 v 值,若不存在返回default值 string.getv(str, k, default, delimiter) 如果要获取多个k的值,则可通过 string.toNumMap() 将字符串转化为 一个table,通过访问table获取相应的值 ps:尽量将多个操作集中为一个table 然后调用 string.msetv or string.mdelk ============ string.setv_dk(str, k1, k2, v, delimiter) string.msetv_dk(str, vs, delimiter) string.incrv_dk(str, k1, k2, delta, delimiter) string.mincrv_dk(str, ds, delimiter) string.delk_dk(str, k1, k2, delimiter) string.mdelk_dk(str, ks, delimiter) string.getv_dk(str, k1, k2, default, delimiter) string.toNumMap(str, delimiter) 这里是多键结构,操作含义如上 ============ "N1#N2#...#Nn" 是一个集合 toArray #为任意分隔符 生成 {N1, N2, ..., Nn} string.toArray(str, toNum, delimiter) value 获取某个序号的元素 序号范围 1~n string.value(str, index, default, notNum, delimiter) sismember 是否存在 value 元素 string.sismember(str, value, delimiter) sadd 添加 值为value 元素,若存在则跳过 string.sadd(str, value, delimiter) srem 删除 值为value 元素 string.srem(str, value, delimiter) ============ 直接从字符串中 随机 string.randWeight(str, bMulti) string.randLine(str) ============ "1010101" 由1,0组成的元素 getbit 获取序号pos 的元素 string.getbit(str, pos) bitcnt 获取 元素值为1 的个数 string.bitcnt(str) 设置位置为pos的值为yes string.setbit(str, pos, yes) ============ lua-strh.c 中为lua层提供的接口,这些都是辅助接口,不要直接在逻辑代码中直接使用,使用stringUtil.lua中封装后的接口 modify moddk getv getvdk toarray tonummap value