全部產品
Search
文件中心

Server Load Balancer:字典類型相關函數

更新時間:Jun 19, 2024

本文為您介紹字典類型相關函數的文法、參數、樣本和傳回值。

set | get | foreach | del

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 ascript')
    
    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 ascript

get

專案

描述

文法

get(d, k)

說明

擷取字典d中k對應的v。

參數

  • d:目標字典。

  • k:key值,可以為任意類型。

傳回值

成功返回對應值,失敗返回false

樣本

  • 樣本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 ascript')
    
    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 ascript

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(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

del

專案

描述

文法

del(d, k)

說明

刪除字典d中的k/v對。

參數

  • 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