List 如何在Vim脚本中展平嵌套列表?
我发现一些Vim列表函数不能像我想的那样工作。 例如:List 如何在Vim脚本中展平嵌套列表?,list,nested,vim,expand,List,Nested,Vim,Expand,我发现一些Vim列表函数不能像我想的那样工作。 例如: let list0 = [1, [1, 2]] echo count(list0, 1) 它返回1,但我希望它返回2。所以我认为这些函数不能深入嵌套列表,只能在第一级工作 我想在这里我应该将嵌套列表扩展为一个普通列表,如下所示: list0 = [1, 1, 2] 如何展平嵌套列表 " Code from bairui@#vim.freenode " https://gist.github.com/3322468 function! F
let list0 = [1, [1, 2]]
echo count(list0, 1)
它返回1
,但我希望它返回2
。所以我认为这些函数不能深入嵌套列表,只能在第一级工作
我想在这里我应该将嵌套列表扩展为一个普通列表,如下所示:
list0 = [1, 1, 2]
如何展平嵌套列表
" Code from bairui@#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
“来自bairui@#vim.freenode的代码
" https://gist.github.com/3322468
功能!展平(列表)
让val=[]
对于a:列表中的元素
如果类型(元素)=类型([])
呼叫扩展(val、展平(elem))
其他的
呼叫添加(val,elem)
恩迪夫
解列元素
外循环
返回值
端功能
此处
unlet elem
是必需的。因为elem
变量是变化的,它是一个列表项或列表,VimL不支持将列表项分配给列表,反之亦然;D
是的,但是我点击了两次正确答案,今天无法更改。不,这是必要的,因为
elem
变量正在更改,它是一个列表项,或者一个列表,VimL不支持将列表项分配给列表,反之亦然。