我可以在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中有类似的概念吗?
答案 0 :(得分:5)
如前所述,关联数组不是有序的。如果您想在该数组中进行排序,请使用以下解决方法。
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
答案 1 :(得分:1)
Bash中没有关联数组的定义排序。因此,脚本输出的顺序将是不可预测的。如果你想在数组中存储更多信息,我建议创建另一个使用相同键的并行关联数组。