e c a (perhaps) 但是索-6ren">
gpt4 book ai didi

bash - 从索引数组 : guaranteed to be ordered? 中提取索引

转载 作者:行者123 更新时间:2023-11-29 09:32:25 26 4
gpt4 key购买 nike

我知道对于关联数组,数组键没有固有顺序:

declare -A map=([a]=b [c]=d [e]=f)
echo "${!map[@]}" # => e c a (perhaps)

但是索引数组呢?

试试这个:

declare -a list
for i in {1..1000}; do list[RANDOM]=1; done
echo "${!list[@]}"

索引似乎是按数字顺序排列的。但我可以依靠它吗?

最佳答案

决定性证据(如前所述)是查阅资料来源(这可能仍会因版本而异),因为查看了 documentation它没有提及 ${!name[@]} 的扩展顺序/${!name[*]}${name[@]}/${name[*]}。然而,特别是。具有 name=(value1 value2 … ) 赋值的基本算法的位以及对负索引的处理以及这有效的事实:

$ a=(1 2); a[8]=9; a[5]=6
$ indices=("${!a[@]}"); for i in "${indices[@]}"; do neg_i="$((-1 -${indices[-1]} + i))"; echo -e "a[$i]: ${a[$i]}\t\ta[$neg_i]: ${a[$neg_i]}" ; done
a[0]: 1 a[-9]: 1
a[1]: 2 a[-8]: 2
a[5]: 6 a[-4]: 6
a[8]: 9 a[-1]: 9

显示索引数组的索引必须考虑到它们的数值才能从任一方向进行索引。这仍然可以在不需要数字排序的情况下实现(更不用说显示/扩展了)。

稳定排序也将与其他语言一致,其中数组/列表(bash 术语中的索引数组)是有序的,而映射对象/字典(关联数组)则不一定,因此相反的选择可能会令人惊讶并导致错误.换句话说,我认为偏离这种行为不太可能是一个合理的决定。

两者都是间接推理,但不是确定的证据。

关于bash - 从索引数组 : guaranteed to be ordered? 中提取索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57185987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com