1

私のプログラミング環境では、非常に大きな 2D 配列があります。サイズは 90x40 です。

外部ファイルからデータをロードして、この配列を埋める必要があります。

データをロードするメカニズムは、以下のようなスタイルでバインディングを行う必要があるバインディング ファイルで構成されます。

Array[0][0] =
Array[0][1] =
Array[0][2] =
...
Array[20][37] = 
Array[20][38] =
...
Array[89][38] =
Array[89][39] =

3600 の部分的に一意の線を作成する必要があることは簡単に計算できます。

gVim で [..][..] 要素を作成し、それらの前に配列の名前を追加できると思いました。プレフィックスを追加するのは簡単ですが、 [..][..] ビットを作成することにこだわりました。

私のシナリオでは、次のようなことでこれを解決したいと考えています:

  1. 3600行を作成
  2. 各行/行の末尾に (:%s/$/\[ -- my expression 1 -- \]/gコマンドを使用して) 0 から 89 までの数字を 40 要素のブロック (40 のゼロ、40 の 1、42 など) に追加します。
  3. 各行/行の終わりに (:%s/$/\[ -- my expression 2-- \]/gコマンドを使用して) 0 から 39 までの数字を 40 要素のブロック (0、1、2、...、39、0、1、... など) に追加します。 )

私の式1は、演算の商に評価されます(number of line) mod 90

私の式2は、操作のリマインダーに評価されます(number of line) mod 40

そして今の質問は次のとおりです。

  1. 評価方法(number of line)
  2. 式の計算方法は(number of line) mod XX
  3. 多分より良いアプローチがありますか?
4

2 に答える 2

3

正規表現を使用したくない場合は、コマンド モードで次のことを試してください。

for i in range(0, 89) | for j in range(0, 39) | put = 'Array['.i.']['.j.'] =' | endfor | endfor
于 2014-05-21T08:16:45.670 に答える
2

VIM マクロは、これに対するより優れたソリューションです。最初の行に書き込みArray[0][0]、 でマクロの記録を開始しqq、次にyyp(行のコピーと貼り付け)、2f[lカーソルを 2 番目の配列インデックスに配置し、 を押し<C-a>てカーソルの下の数値を 1 増やしてから、q記録を停止します。これが完了したら、ヒット38@qしてマクロを 38 回繰り返し、完全なリストを作成します。

次に、マクロの記録を再開しqq39k39 行上に移動して 39 行V39jy39jpを選択し、コピーして貼り付け0f[l、最初の配列インデックス<C-v>39jに移動してブロック選択し、最初のインデックス<C-a>を 1 つインクリメントしてq記録を終了します。ここ88@qで、目的の出力を得るために、最後のステップを 88 回繰り返します。

注: マクロの実行、特に最後のマクロの実行に88@qは時間がかかるため、しばらく待つ必要があります。

ただし、完全を期すために、式 1 がどのように行われるかについて言及したいと思います。:%s/$/\=(line('.') - 1) % 90式 2 についても同様

于 2014-05-21T02:22:37.907 に答える