一部のVimリスト関数が思ったように機能しないことがわかりました。例えば:
let list0 = [1, [1, 2]]
echo count(list0, 1)
を返しますが1、を返したいです2。したがって、これらの関数はネストされたリストに深く入り込むことはできず、最初のレベルでのみ機能すると思います。
ここで、ネストされたリストを次のような通常のリストに展開する必要があると思います。
list0 = [1, 1, 2]
ネストされたリストをフラット化する方法は?
"bairui@#vim.freenodeからのコード
"https://gist.github.com/3322468
働き!Flatten(リスト)
val=[]とします
a:listのelemの場合
type(elem)== type([])の場合
extend(val、Flatten(elem))を呼び出す
そうしないと
add(val、elem)を呼び出す
endif
unlet elem
endfor
戻り値
エンドファンクション
ここunlet elemが必要です。elem変数が変化しているため、それはリストアイテム、またはリストであり、VimLはリストアイテムのリストへの割り当てをサポートしていません。その逆も同様です。
別の答えとしてvital.vimのData.List.flattenを提案します;D
reduce()8.2.0878以降で使用できます。
let mylist = [[1, 2], [3, 4], 5]
echo reduce(mylist, { acc, val -> type(val) == 3 ? extend(acc, val) : add(acc, val)})
出力:
[1, 2, 3, 4, 5]