1. ホーム
  2. linux

[解決済み] bashで2次元配列を宣言する方法

2023-03-18 02:09:26

質問

bashで2次元配列を宣言し、0に初期化する方法を教えてください。

C言語ではこのようになります。

int a[4][5] = {0};

そして、要素に値を割り当てるにはどうすればよいのでしょうか?C言語のように

a[2][3] = 3;

どのように解決するのですか?

例えばハッシュを使えばシミュレーションができますが、先頭のゼロや他の多くのことに気を配る必要があります。次のデモは動作しますが、最適解からは程遠いものです。

#!/bin/bash
declare -A matrix
num_rows=4
num_columns=5

for ((i=1;i<=num_rows;i++)) do
    for ((j=1;j<=num_columns;j++)) do
        matrix[$i,$j]=$RANDOM
    done
done

f1="%$((${#num_rows}+1))s"
f2=" %9s"

printf "$f1" ''
for ((i=1;i<=num_rows;i++)) do
    printf "$f2" $i
done
echo

for ((j=1;j<=num_columns;j++)) do
    printf "$f1" $j
    for ((i=1;i<=num_rows;i++)) do
        printf "$f2" ${matrix[$i,$j]}
    done
    echo
done

上記の例では、4x5の行列を乱数で作成し、それを転置して表示しています。

           1         2         3         4
 1     18006     31193     16110     23297
 2     26229     19869      1140     19837
 3      8192      2181     25512      2318
 4      3269     25516     18701      7977
 5     31775     17358      4468     30345

原理はこうです。のような文字列をインデックスとする連想配列を1つ作成することです。 3,4 . 利点は

  • のように、任意の次元の配列に使用することができます;)。 30,40,2 3次元の場合
  • は、配列のような "C"に近い構文です。 ${matrix[2,3]}