2012-08-11 65 views
2

我发现一些Vim列表函数不能按我的想法工作。 例如:如何在Vim脚本中拼合嵌套列表?

let list0 = [1, [1, 2]] 
echo count(list0, 1) 

它返回1,但我想它返回2。所以我认为这些函数不能深入到嵌套列表中,只能在第一级工作。

我想在这里我应该扩大嵌套列表为普通列表如下:

list0 = [1, 1, 2] 

如何扁平化嵌套列表?

回答

2
 
" Code from [email protected]#vim.freenode 
" https://gist.github.com/3322468 
function! Flatten(list) 
    let val = [] 
    for elem in a:list 
    if type(elem) == type([]) 
     call extend(val, Flatten(elem)) 
    else 
     call add(val, elem) 
    endif 
    unlet elem 
    endfor 
    return val 
endfunction 

这里unlet elem是必要的。由于elem变量是变更,它是一个列表项或列表,VimL不支持将列表项分配给列表,反之亦然。

+0

是的,但我点了正确的答案两次,今天不能改变。 – stardiviner 2012-08-11 09:56:03

+0

不,这是必要的,因为'elem'变量正在改变,它是一个列表项或列表,VimL不支持将一个列表项分配给一个列表,反之亦然。 – stardiviner 2012-08-12 04:20:17