案例分析:遍历map 内部元素相加

发布于:2024-09-18 ⋅ 阅读:(126) ⋅ 点赞:(0)

案例分析:遍历map 内部元素相加

20240912 写在前面:造轮子 有什么不好呢?我造了轮子,你造了发动机,他造了车身铁皮,我们组装一下就可以上路了,不是吗?走,开路!

问题:

最近开发中遇到一个问题,就是多设备 Long 对应了一组数据 Double[],Double[]又是个多列数组,但是列数相同。期望是将Double[]相同列的值求和合并,并输出一个 求和后的Double[]

简单的说就是:

遍历Map<Long, Double[]> devPowerMap 将其中的double[]相同索引的相加 输出一个新的Double。

…大家先思考一下…试试自己有咩有答案。

one ti

程序员暑假作业课后答案[狗头]:

我们的目的是遍历 Map<Long, Double[]>,并将其中每个 double[] 的相同索引的值相加,那么可以通过以下步骤实现:

  1. 初始化一个结果数组,长度与 Double[] 相同,用来存储每个索引的总和。
  2. 遍历 Map<Long, Double[]> 中的每个 Double[],将相同索引的值进行相加。
  3. 输出总和的结果数组

实现代码:

package com.javastudy.springboot3framework.myapp.tools;

import java.util.HashMap;
import java.util.Map;

/**
 * @author zhizhou   2024/9/12 22:45
 */
public class SumMapValues {
    
    public static void main(String[] args) {
        // 初始化Map<Long, Double[]>
        Map<Long, Double[]> devPowerMap = new HashMap<>();
        
        devPowerMap.put(1L, new Double[]{1.0, 2.0, 3.0, 4.0, 5.0});
        devPowerMap.put(2L, new Double[]{6.0, 7.0, 8.0, 9.0, 10.0});
        devPowerMap.put(3L, new Double[]{11.0, 12.0, 13.0, 14.0, 15.0});
        
        // 假设所有 Double[] 的长度相同,初始化一个总和数组
        int length = devPowerMap.values().iterator().next().length; // 获取数组长度
        Double[] totalSums = new Double[length];
        
        // 初始化 totalSums 数组为0
        for (int i = 0; i < length; i++) {
            totalSums[i] = 0.0;
        }
        
        // 遍历 Map,累加相同索引的值
        for (Map.Entry<Long, Double[]> entry : devPowerMap.entrySet()) {
            Double[] values = entry.getValue();
            for (int i = 0; i < values.length; i++) {
                totalSums[i] += values[i];
            }
        }
        
        // 输出每个索引相加后的总和
        System.out.println("每个索引值的和:");
        for (int i = 0; i < totalSums.length; i++) {
            System.out.println("索引 " + i + " 对应值之和: " + totalSums[i]);
        }
    }
}

代码说明:

  1. devPowerMap:一个 Map<Long, Double[]>,键为设备ID,值为 Double[]
  2. totalSums:一个数组,用来存储相同索引位置的累加结果。它的长度是从 Map 中取的第一个 Double[] 的长度。
  3. 遍历逻辑
    • 遍历 Map 中的每个 Double[],将其相同索引的值累加到 totalSums 中。
    • 输出累加结果。

输出结果:

假设 devPowerMap 包含如下数据:

devPowerMap.put(1L, new Double[]{1.0, 2.0, 3.0, 4.0, 5.0});
devPowerMap.put(2L, new Double[]{6.0, 7.0, 8.0, 9.0, 10.0});
devPowerMap.put(3L, new Double[]{11.0, 12.0, 13.0, 14.0, 15.0});

则输出结果为:

每个索引值的和:
索引 0 对应值之和: 18.0
索引 1 对应值之和: 21.0
索引 2 对应值之和: 24.0
索引 3 对应值之和: 27.0
索引 4 对应值之和: 30.0

这个方案可以高效地遍历 Map<Long, Double[]> 并对每个索引的值进行相加。目前这个问题是解决了,那我们再扩展一下,相同索引求和是一种场景。

  • 那假如 Double[]中每2个一组再求和呢?
  • 要是 直接求总和呢?

大家可以思考一下,试试看~