在 Bash 中產生未知維度的二維數組

在 Bash 中產生未知維度的二維數組

只是想知道如果在用戶輸入之前不知道尺寸,是否可以生成二維數組。例如,如果使用者在命令列上輸入 2 2,shell 將基於此產生 2D 陣列?謝謝

答案1

bash是一種解釋型語言,不需要事先知道要分配多少記憶體。

因此,可以在沒有聲明的情況下動態初始化一個新數組,或者擴展已經聲明的數組以添加更多條目,但是不可能使用多維數組。

然而,這可以是偽造的:由於您沒有提供要完成的確切任務,我將提供一個bash腳本示例,該示例顯示如何使用隨機數填充用戶定義的m x n表(這不是真正隨機的,因為每一列都會每次運行中所有行上始終具有相同的數字,但這與問題無關)並列印它(從堆疊溢位答案):

#!/bin/bash

declare -a array
read -p 'm: ' m
read -p 'n: ' n
for ((i=0; i<m; i++))
do
    for ((j=0; j<n; j++))
    do
        a[${i},${j}]=$RANDOM
    done
done
for ((i=0; i<m; i++))
do
    for ((j=0; j<n; j++))
    do
        echo -ne "${a[${i},${j}]}\t"
    done
    echo
done

答案2

您可以聲明一個一維數組並在運行時將所有數字讀入一維數組。知道維度後,您可以「像處理二維數組一樣」處理一維數組。

例如,假設一維數組包含

[1, 5, 9, 11]

如果我們真的想要

[[1,5], [9,11]]

作為我們的數組,索引 0 是 [1,5] 那麼你可以這樣做來存取 [1,5] (pos = 0)

虛擬程式碼

for i in 0:(pos*dim + dim-1)  
    echo arr[i]

訪問 [9,11] (pos = 1)

for i in pos*dim:(pos*dim + dim - 1)
    echo arr[i]

希望這有一定道理。實際上,二維數組是一維數組的一種。

相關內容