MST
星途 面试题库

面试题:Bash复杂数组遍历与特定排序

假设有一个关联数组,其键为字符串表示的水果名称,值为对应的价格(浮点数)。请编写Bash脚本,遍历该关联数组,并按照价格从高到低的顺序输出水果名称和价格。要求使用自定义的排序函数实现。
41.3万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

# 定义关联数组
declare -A fruits=(
    ["apple"]=2.5
    ["banana"]=1.8
    ["cherry"]=3.2
)

# 自定义排序函数,根据价格从高到低排序
sort_by_price() {
    local -n arr=$1
    local keys=(${!arr[@]})
    local values=("${arr[@]}")

    for ((i = 0; i < ${#keys[@]} - 1; i++)); do
        for ((j = i + 1; j < ${#keys[@]}; j++)); do
            if (( $(echo "${values[i]} < ${values[j]}" | bc -l) )); then
                # 交换键
                temp_key="${keys[i]}"
                keys[i]="${keys[j]}"
                keys[j]="$temp_key"

                # 交换值
                temp_value="${values[i]}"
                values[i]="${values[j]}"
                values[j]="$temp_value"
            fi
        done
    done

    for ((i = 0; i < ${#keys[@]}; i++)); do
        echo "${keys[i]}: ${values[i]}"
    done
}

# 调用排序函数
sort_by_price fruits