我有两个数组:
SUBJECT_IDS=(44456 11123 77789)
DCM_FILES=("./77789/77789/"DICOM"" "./11123/11123/"DICOM"" "./44456/44456/77789/"DICOM"" )
然后我排序以使索引更容易/已经通过索引“配对”了它:
IFS=$'\n'
sorted_SUBJECT_IDS=($(sort <<<"${SUBJECT_IDS[*]}"))
sorted_DCM_FILES=($(sort <<<"${DCM_FILES[*]}"))
如何通过将两个数组配对并创建一个关联数组?
headers=(
[11123]=./11123/11123/DICOM
[44456]=./44456/44456/DICOM
[77789]=./77789/77789/DICOM
)
这是我创建关联数组的尝试:
declare -A headers
i=0
for i in "${sorted_SUBJECT_IDS[@]}"
do
headers["$i"]="${sorted_DCM_FILES[i]}";
echo "$i" : "${sorted_DCM_FILES[i]}"
((i++))
done
输出:
11123 :
44456 :
77789 :
typeset -A hash
hash=("$(@){sorted_SUBJECT_IDS:^sorted_DCM_FILES}")
输出:
bash: hash: "$(@){sorted_SUBJECT_IDS:^sorted_DCM_FILES}": mustuse subscript when assigning associative array
答案 0 :(得分:1)
您的sort
不能按照您希望的方式工作,而且您的数组迭代应该通过索引而不是按项目进行。
您可以使用:
sorted_SUBJECT_IDS=($(sort -n <(printf '%s\n' "${SUBJECT_IDS[@]}")))
sorted_DCM_FILES=($(sort -n <(printf '%s\n' "${DCM_FILES[@]}")))
declare -A headers
for i in "${!sorted_SUBJECT_IDS[@]}"; do
headers["${sorted_SUBJECT_IDS[i]}"]="${sorted_DCM_FILES[i]}"
done
# check header associative array
declare -p headers
declare -A headers=([77789]="./77789/77789/DICOM" [44456]="./44456/44456/77789/DICOM" [11123]="./11123/11123/DICOM" )