繁体   English   中英

bash中的有序关联数组

[英]Ordered associative arrays in bash

我可以在bash执行以下操作:

declare -A data
data[A]="aaa"
data[C]="ccc"
data[B]="bbb"

for i in "${!data[@]}" ; do
    printf "%-20s ---> %s\n" "$i" "${data[$i]}"
done

哪个输出:

A                    ---> aaa
B                    ---> bbb
C                    ---> ccc

就是说,关联数组被重新排序(我假设对键使用字典顺序,但是不确定),并且丢失了创建数据的原始顺序。 我想改为:

A                    ---> aaa
C                    ---> ccc
B                    ---> bbb

python我将使用OrderedDict而不是简单的dict bash有类似的概念吗?

正如已经回答的那样,关联数组不是有序的。 如果要在该阵列中订购,请使用以下解决方法。

declare -A data
data_indices=()
data[A]="aaa"; data_indices+=(A)
data[C]="ccc"; data_indices+=(C)
data[B]="bbb"; data_indices+=(B)

for i in "${data_indices[@]}" ; do
    printf "%-20s ---> %s\n" "$i" "${data[$i]}"
done

Bash中没有定义关联数组的顺序。 因此,脚本输出的顺序将不可预测。 如果要在阵列中存储更多信息,建议创建另一个使用相同键的并行关联阵列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM