You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比较两个数组内容?匹配时获取对应值并求和

如何比较两个数组并匹配求和

这问题我熟,用bash处理的话,咱们可以分两步来搞定:先把array1转换成键值对形式的关联数组(相当于字典),这样能快速查找每个应用对应的数值;然后遍历array2的元素,逐个检查是否存在于关联数组中,存在的话就把对应数值累加起来。

步骤1:将array1转换为关联数组

array1的结构是应用名+数值成对出现的,所以我们可以遍历它,把每个应用名作为键,对应的数值作为值存入关联数组:

# 声明一个关联数组
declare -A app_value_map

# 遍历array1,每次取两个元素(应用名和对应数值)
for ((index=0; index<${#array1[@]}; index+=2)); do
    app_name="${array1[$index]}"
    app_num="${array1[$index+1]}"
    app_value_map["$app_name"]="$app_num"
done

步骤2:遍历array2并累加匹配的数值

接下来初始化一个总和变量,然后逐个检查array2里的元素:

total_sum=0

for target_app in "${array2[@]}"; do
    # 检查当前应用是否在关联数组中(即是否存在对应的数值)
    if [[ -n "${app_value_map[$target_app]}" ]]; then
        # 存在的话就把数值加到总和里
        total_sum=$((total_sum + ${app_value_map[$target_app]}))
    fi
done

# 输出最终结果
echo "匹配到的数值总和为:$total_sum"

验证你的示例数据

用你给出的数组内容测试:

  • array1里的对应关系:Application_5678342→7,Application_1289764→9,Application_8907897→50
  • array2的元素依次是:Application_5678342、Application_1289764、Application_8907897、Application_5678342、Application_1289764
  • 计算总和:7+9+50+7+9=82,运行代码后会输出这个结果。

注意事项

如果array1里出现重复的应用名,关联数组会自动保留最后一次出现的数值(因为bash的关联数组键是唯一的),这点需要留意哦。

内容的提问来源于stack exchange,提问作者Ramesh Pokhrel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:40:59