連想配列をソートしてキーを保存する方法は?

連想配列をソートしてキーを保存する方法は?

ファイル名をキーに、数値を値として持つ配列があります。

MYARRAY[00001.jpg] = 31
MYARRAY[00002.jpg] = 200
MYARRAY[00003.jpg] = 98

値でソートするようにソートする必要があります。私がしていること

IFS=$'\n' SORTED=($(sort <<<"${MYARRAY[*]}"))

ところが鍵を失って今はデジタルキーだけ残っています。

希望の出力は

00001.jpg:31
00003.jpg:98
00002.jpg:200

このようにキーをどのように保存できますか?

ベストアンサー1

キーにコロンや改行が含まれておらず、値に改行が含まれていないとします。

for key in "${!MYARRAY[@]}"; do
  printf '%s:%s\n' "$key" "${MYARRAY[$key]}"
done | sort -t : -k 2n

値に基づいて指定された順序でキーが必要な場合は、出力をもう一度読みます。

IFS=$'\n'; set -f
sorted_keys=($(
    for key in "${!MYARRAY[@]}"; do
      printf '%s:%s\n' "$key" "${MYARRAY[$key]}"
    done | sort -t : -k 2n | sed 's/:.*//'))
unset IFS; set +f

おすすめ記事