stringhelper.txt 2.75 KB
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