awkのスパース配列のメモリ割り当て

awkのスパース配列のメモリ割り当て

検索しましたが、どの結論も下げませんでした。スパース配列を定義すると、すべての項目が保持されますか?連続メモリ最大インデックスまでのみ割り当てるか、そのインデックスにのみメモリを割り当てます。

array[100000]="ID1"
array[1001]="ID2"

同様に、配列に対して for ループを実行すると、配列のすべてのインデックスが検索されます。配列[i]が存在しますまたはそれだけを指す配列のインデックス定義例えば。 100000と1001。

for(i in array){...}

特定のインデックスにどの値を格納する必要がありますが、メモリ割り当てが心配されるため、スパース配列の場合、実際にどのようにメモリを割り当てるかを理解することが非常に重要です。

ベストアンサー1

~によるとgawk手動、これは良い一般awk言語参照です。

配列について覚えておくべき重要な側面は次のとおりです。配列添字は常に文字列です。

つまり、awk配列は常に関連付けられている、数字キーが文字列として表示されます。使用されるキーのみが配列に保存されます(後で使用する余分なスペースもあります)。数値インデックスは連続的ではないため、希少配列は、同じ数の要素を持つ他の配列よりも多くのスペースを占有しません。

ループの場合、for (k in array) {body}文法これ:

ループの実行インデックスごとに1回大量にこのプログラムは以前に使用されたことがあります。

同様に、使用されたインデックスのみが配列反復に含まれます。気づく繰り返し順序が定義されていません。ただし、必ずしも配列に追加される数値や順序ではありません。

おすすめ記事