本文为您介绍字典类型相关函数的语法、参数、示例和返回值。

set

使用set在字典d中设置k和v,函数的详细信息见下表。
项目 描述
语法 set(d, k, v)
参数
  • d:目标字典。
  • k:key值,可以为任意类型。
  • v:value值,可以为任意类型。
示例
  • 示例1
    outer_keys=['e66fd4aa-f281-472f-b919-fc7e7474****', '66fee78d-1887-42ec-9119-a9b50b7f****']
    say(concat('keys[1]=', get(outer_keys, 1)))
    say(concat('keys[2]=', get(outer_keys, 2)))
    
    inner_keys=[]
    set(inner_keys, 'dev', '243390eb-00b7-4551-a6b8-021bb34d****')
    set(inner_keys, 'zeus', '4747d33b-12b0-45e6-ac10-a8e191d6****')
    
    def echo_each(k, v, u) {
        s = concat('keys[', k, ']=', v)
        say(s)
    }
    foreach(inner_keys, echo_each, [])                                                                                                                                             
  • 示例2
    d_inner = []
    set(d_inner, 'name', 'inner dsl')
    
    d_outer = []
    set(d_outer, 'dictA', d_inner)
    
    v = get(d_outer, 'dictA')
    if v {
        v = get(v, 'name')
        if v {
            add_rsp_header('X-DSL-NESTED-DICT', v)
        }
    }
返回值 始终返回true。本示例的返回值如下:
  • 示例1的返回值
    keys[1]=e66fd4aa-f281-472f-b919-fc7e7474****
    keys[2]=66fee78d-1887-42ec-9119-a9b50b7f****
    keys[dev]=243390eb-00b7-4551-a6b8-021bb34d****
    keys[zeus]=4747d33b-12b0-45e6-ac10-a8e191d6****
  • 示例2的返回值:增加响应头。
    X-DSL-NESTED-DICT: inner dsl

get

使用get获取字典d中k对应的v,函数的详细信息见下表。
项目 描述
语法 get(d, k)
参数
  • d:目标字典。
  • k:key值,可以为任意类型。
示例
outer_keys=['e66fd4aa-f281-472f-b919-fc7e7474****', '66fee78d-1887-42ec-9119-a9b50b7f****']
say(concat('keys[1]=', get(outer_keys, 1)))
say(concat('keys[2]=', get(outer_keys, 2)))

inner_keys=[]
set(inner_keys, 'dev', '243390eb-00b7-4551-a6b8-021bb34d****')
set(inner_keys, 'zeus', '4747d33b-12b0-45e6-ac10-a8e191d6****')

def echo_each(k, v, u) {
    s = concat('keys[', k, ']=', v)
    say(s)
}
foreach(inner_keys, echo_each, [])                                                                                                                                             
返回值 获取成功返回对应的值,获取失败返回false。本示例的返回值如下:
keys[1]=e66fd4aa-f281-472f-b919-fc7e7474****
keys[2]=66fee78d-1887-42ec-9119-a9b50b7f****
keys[dev]=243390eb-00b7-4551-a6b8-021bb34d****
keys[zeus]=4747d33b-12b0-45e6-ac10-a8e191d6****

foreach

foreach函数的说明如下:
  • 遍历字典d中的元素,依次回调函数f。
  • f原型要求为 f(key, value, user_data)
  • f()返回false时,foreach()循环终止。
函数的详细信息见下表。
项目 描述
语法 foreach(d, f, user_data)
参数
  • d:目标字典。
  • f:回调函数。
  • user_data:用于传递用户数据,为字典类型。
示例
  • 示例1
    outer_keys=['e66fd4aa-f281-472f-b919-fc7e7474****', '66fee78d-1887-42ec-9119-a9b50b7f****']
    say(concat('keys[1]=', get(outer_keys, 1)))
    say(concat('keys[2]=', get(outer_keys, 2)))
    
    inner_keys=[]
    set(inner_keys, 'dev', '243390eb-00b7-4551-a6b8-021bb34d****')
    set(inner_keys, 'zeus', '4747d33b-12b0-45e6-ac10-a8e191d6****')
    
    def echo_each(k, v, u) {
        s = concat('keys[', k, ']=', v)
        say(s)
    }
    foreach(inner_keys, echo_each, [])                                                                                                                                             
  • 示例2
    输出m3u8的前2个分片,演示终止foreach循环。
    def echo_each(k, v, u) {
        say(v)
    
        if match_re(v, '.*ts') {
            ts_cnt = get(u, 'ts_cnt')
            ts_cnt = add(ts_cnt, 1)
            set(u, 'ts_cnt', ts_cnt)
    
            if ge(ts_cnt, 2) {
                return false
            }
        }
    }
    
    m3u8 = ''
    m3u8 = concat(m3u8, '#EXTM3U8', '\n')
    m3u8 = concat(m3u8, '#EXT-X-MEDIA-SEQUENCE:14065****\n')
    m3u8 = concat(m3u8, '#EXT-X-TARGETDURATION:10\n')
    m3u8 = concat(m3u8, '#EXTINF:8,\n')
    m3u8 = concat(m3u8, 'http://***.cn/cache/289_/seg0/index140651514_1406****.ts\n')
    m3u8 = concat(m3u8, '#EXTINF:9,\n')
    m3u8 = concat(m3u8, 'http://***.cn/cache/289_/seg0/index140651514_1406****.ts\n')
    m3u8 = concat(m3u8, '#EXTINF:10,\n')
    m3u8 = concat(m3u8, 'http://***.cn/cache/289_/seg0/index140651514_1406****.ts\n')
    
    lines = split(m3u8, '\n')
    u = []
    set(u, 'ts_cnt', 0)
    foreach(lines, echo_each, u)
返回值 始终返回true。本示例的返回值如下:
  • 示例1的返回值
    keys[1]=e66fd4aa-f281-472f-b919-fc7e7474****
    keys[2]=66fee78d-1887-42ec-9119-a9b50b7f****
    keys[dev]=243390eb-00b7-4551-a6b8-021bb34d****
    keys[zeus]=4747d33b-12b0-45e6-ac10-a8e191d6****
  • 示例2的返回值
    #EXTM3U8
    #EXT-X-MEDIA-SEQUENCE:140651513
    #EXT-X-TARGETDURATION:10
    #EXTINF:8,
    http://***.cn/cache/289_/seg0/index140651514_1406****.ts
    #EXTINF:9,
    http://***.cn/cache/289_/seg0/index140651514_1406****.ts

del

使用del删除字典d中的k/v对,函数的详细信息见下表。
项目 描述
语法 del(d, k)
参数
  • d:目标字典。
  • k:key值,可以为任意类型。
示例
var_a = []
set(var_a, 'note_a', 'note a info')
if get(var_a, 'note_a') {
    add_rsp_header('X-RESPOND-OUTPUT', 'found var_a key', true)
} else {
    add_rsp_header('X-RESPOND-OUTPUT', 'del var_a key', true)
}
del(var_a, 'note_a')
if get(var_a, 'note_a') {
    add_rsp_header('X-RESPOND-OUTPUT', 'found var_a key', true)
} else {
    add_rsp_header('X-RESPOND-OUTPUT', 'del var_a key', true)
}
返回值 始终返回true。本示例的返回值如下:
X-RESPOND-OUTPUT: found var_a key
X-RESPOND-OUTPUT: del var_a key

insert

使用insert向字典中插入值,函数的详细信息见下表。
项目 描述
语法 insert(list, value, [,pos])
参数
  • list:字典类型。
  • value:任意类型。
  • pos:number类型。不可以为0,list索引默认从1开始,在list的位置pos处插入元素value ,并后移元素pos+1到尾部元素未指定时,默认末尾插入。
示例
tbl_1 = []
insert(tbl_1, '1')
insert(tbl_1, '3')
insert(tbl_1, '5')
insert(tbl_1, '2')
insert(tbl_1, '6', 1)
str = tbl_concat(tbl_1, '')
say(concat('insert:', str))
返回值 始终返回true。本示例的返回值如下:
insert:61352 

sort

使用sort对list中元素按照默认算法排序,函数的详细信息见下表。
项目 描述
语法 sort(list[, comp])
说明 如果提供了comp,它必须是一个可以接收两个列表内元素为参数的函数。 当第一个元素需要排在第二个元素之前时,返回真(因此 not comp(a, b) 在排序结束后,将为真)。如果没有提供comp,则按字符的ANSII码从小到大排序,排序算法并不稳定,即当两个元素次序相等时,它们在排序后的相对位置可能会改变。
参数
  • list:字典类型。
  • comp:自定义排序算法函数,为函数类型。
示例
tbl_1 = []
insert(tbl_1, '1')
insert(tbl_1, '3')
insert(tbl_1, '5')
insert(tbl_1, '2')
say(concat('remove:', remove(tbl_1, 2)))
str = tbl_concat(tbl_1, '')
say(concat('insert:', str))
sort(tbl_1)
str = tbl_concat(tbl_1, '')
say(concat('sort:', str))
def my_comp(a, b){
  a = tonumber(a)
  b = tonumber(b)
  if gt(a, b) {
    return true
  }
  return false
}
sort(tbl_1, my_comp)
str = tbl_concat(tbl_1, '')
say(concat('sort_comp:', str))
返回值 始终返回true。本示例的返回值如下:
remove:3
insert:152
sort:1235
sort_comp:521 

remove

使用remove对list中指定位置元素移除,并返回这个值,无pos时移除尾部,函数的详细信息见下表。
项目 描述
语法 remove(list, [, pos])
参数
  • list:字典类型。
  • pos:number类型。
示例
tbl_1 = []
insert(tbl_1, '1')
insert(tbl_1, '3')
insert(tbl_1, '5')
insert(tbl_1, '2')
say(concat('remove:', remove(tbl_1, 2)))
返回值 移除位置的数据存储类型。本示例的返回值如下:
remove:3