3

一部のVimリスト関数が思ったように機能しないことがわかりました。例えば:

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

を返しますが1、を返したいです2。したがって、これらの関数はネストされたリストに深く入り込むことはできず、最初のレベルでのみ機能すると思います。

ここで、ネストされたリストを次のような通常のリストに展開する必要があると思います。

list0 = [1, 1, 2]

ネストされたリストをフラット化する方法は?

4

3 に答える 3

3
"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はリストアイテムのリストへの割り当てをサポートしていません。その逆も同様です。

于 2012-08-11T08:23:09.700 に答える
0

別の答えとしてvital.vimのData.List.flattenを提案します;D

https://github.com/vim-jp/vital.vim

于 2018-11-30T00:46:30.420 に答える
0

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]
于 2021-12-25T06:42:46.960 に答える