java - 如何更好的计算两个相同格式的Array数据的平均值
巴扎黑
巴扎黑 2017-06-23 09:13:23
0
2
770

现有两个格式相同JSONArray

一个为新增的数据

saveArray:[{"name":"名字1","value":10},{"name":"名字2","value":12},...,{}]

一个为平均值数据

avgArray:[{"name":"名字1","value":11},{"name":"名字2","value":13},...,{}]

知道计算平均值的数量 int num = 10;

然后根据新增数据,计算平均值后,更新已有的平均值记录:

最后得到:

newAvgArray:[{"name":"名字1","value":(10 x 11 + 10)/11},{"name":"名字2","value":(13 x 10 +12)/11},...,{}]

我能想到的办法就是:

for (int i = 0;i < avgArray.size();i++){
   avgObj = avgArray.get(i).get("value");
   addValue = saveArray.get(i).get("value");
   //然后计算新的值保存新的Array
}

有没有更好的办法去计算

巴扎黑
巴扎黑

全部回复(2)
过去多啦不再A梦

没有了。

算法上来说,这个已经最简化了。O(n)

为情所困
    public static void getNewArrayAvg(JSONArray add,JSONArray avg,int num){
        JSONArray res = new JSONArray();
        int size = add.size();
        int range = avg.size();
        for (int i = 0; i < size; i++) {
            String key = add.getJSONObject(i).getString("name");
            double avgNum = add.getJSONObject(i).getDoubleValue("value")/(num+1.0);
            for (int j = 0; j < range; j++) {
                if (key.equals(avg.getJSONObject(j).getString("name"))) {
                    avgNum += avg.getJSONObject(j).getDoubleValue("value") * (num/(num+1.0));
                    JSONObject tmp = new JSONObject();
                    tmp.put("name", key);
                    tmp.put("value", avgNum);
                    res.add(tmp);
                    break;
                }
            }
        }
        res.toString();
    }

应该有大神能够用lambda骚气的操作,但就你的要求而言,只能取值重新计算,另外,你要多审题。
不能下面这种操作,要确保name的值能够对应上。

   avgObj = avgArray.get(i).get("value");
   addValue = saveArray.get(i).get("value");
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!