如何比较两个数组内容?匹配时获取对应值并求和
如何比较两个数组并匹配求和
这问题我熟,用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→50array2的元素依次是:Application_5678342、Application_1289764、Application_8907897、Application_5678342、Application_1289764- 计算总和:7+9+50+7+9=82,运行代码后会输出这个结果。
注意事项
如果array1里出现重复的应用名,关联数组会自动保留最后一次出现的数值(因为bash的关联数组键是唯一的),这点需要留意哦。
内容的提问来源于stack exchange,提问作者Ramesh Pokhrel
相关产品推荐
相关产品推荐

