java - 如何更好的計算兩個相同格式的Array資料的平均值
巴扎黑
巴扎黑 2017-06-23 09:13:23
0
2
806

現有兩個格式相同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");
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板