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

set

函数详细解释如下:
  • 语法:set(d, k, v)
  • 说明

    在字典d中设置k/v

  • 参数
    • d:目标字典。
    • k:key值,任意类型。
    • v:value值,任意类型。
  • 返回值

    返回true

  • 示例
    • 示例1
      outer_keys=['e66fd4aa-f281-472f-b919-fc7e7474de25', '66fee78d-1887-42ec-9119-a9b50b7fbca2']
      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-021bb34d1674')
      set(inner_keys, 'zeus', '4747d33b-12b0-45e6-ac10-a8e191d6adaa')
      
      def echo_each(k, v, u) {
          s = concat('keys[', k, ']=', v)
          say(s)
      }
      foreach(inner_keys, echo_each, [])
      
      输出:
      keys[1]=e66fd4aa-f281-472f-b919-fc7e7474de25
      keys[2]=66fee78d-1887-42ec-9119-a9b50b7fbca2
      keys[dev]=243390eb-00b7-4551-a6b8-021bb34d1674
      keys[zeus]=4747d33b-12b0-45e6-ac10-a8e191d6adaa                                                                                                                                              
    • 示例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)
          }
      }
      
      输出:增加响应头
      X-DSL-NESTED-DICT: inner dsl

get

函数详细解释如下:
  • 语法:get(d, k)
  • 说明

    获取字典dk对应的v

  • 参数
    • d:目标字典。
    • k:key值,任意类型。
  • 返回值

    成功返回对应值,失败返回false

  • 示例
    outer_keys=['e66fd4aa-f281-472f-b919-fc7e7474de25', '66fee78d-1887-42ec-9119-a9b50b7fbca2']
    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-021bb34d1674')
    set(inner_keys, 'zeus', '4747d33b-12b0-45e6-ac10-a8e191d6adaa')
    
    def echo_each(k, v, u) {
        s = concat('keys[', k, ']=', v)
        say(s)
    }
    foreach(inner_keys, echo_each, [])
    
    输出:
    keys[1]=e66fd4aa-f281-472f-b919-fc7e7474de25
    keys[2]=66fee78d-1887-42ec-9119-a9b50b7fbca2
    keys[dev]=243390eb-00b7-4551-a6b8-021bb34d1674
    keys[zeus]=4747d33b-12b0-45e6-ac10-a8e191d6adaa                                                                                                                                              

foreach

函数详细解释如下:
  • 语法:foreach(d, f, user_data)
  • 说明
    • 遍历字典d中的元素,依次回调函数f
    • f原型要求为 f(key, value, user_data)
    • f()返回false时,foreach()循环终止。
  • 参数
    • d:目标字典。
    • f:回调函数。
    • user_data:用于传递用户数据,字典类型。
  • 返回值

    返回true

  • 示例
    • 示例1
      outer_keys=['e66fd4aa-f281-472f-b919-fc7e7474de25', '66fee78d-1887-42ec-9119-a9b50b7fbca2']
      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-021bb34d1674')
      set(inner_keys, 'zeus', '4747d33b-12b0-45e6-ac10-a8e191d6adaa')
      
      def echo_each(k, v, u) {
          s = concat('keys[', k, ']=', v)
          say(s)
      }
      foreach(inner_keys, echo_each, [])
      
      输出:
      keys[1]=e66fd4aa-f281-472f-b919-fc7e7474de25
      keys[2]=66fee78d-1887-42ec-9119-a9b50b7fbca2
      keys[dev]=243390eb-00b7-4551-a6b8-021bb34d1674
      keys[zeus]=4747d33b-12b0-45e6-ac10-a8e191d6adaa                                                                                                                                              
    • 示例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:140651513\n')
      m3u8 = concat(m3u8, '#EXT-X-TARGETDURATION:10\n')
      m3u8 = concat(m3u8, '#EXTINF:8,\n')
      m3u8 = concat(m3u8, 'http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651514_140651513.ts\n')
      m3u8 = concat(m3u8, '#EXTINF:9,\n')
      m3u8 = concat(m3u8, 'http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651514_140651514.ts\n')
      m3u8 = concat(m3u8, '#EXTINF:10,\n')
      m3u8 = concat(m3u8, 'http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651514_140651515.ts\n')
      
      lines = split(m3u8, '\n')
      u = []
      set(u, 'ts_cnt', 0)
      foreach(lines, echo_each, u)
      
      输出:
      #EXTM3U8
      #EXT-X-MEDIA-SEQUENCE:140651513
      #EXT-X-TARGETDURATION:10
      #EXTINF:8,
      http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651514_140651513.ts
      #EXTINF:9,
      http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651514_140651514.ts