java - 如何更好的計算兩個相同格式的Array數據的平均值
問題描述
現有兩個格式相同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}
有沒有更好的辦法去計算
問題解答
回答1:沒有了。
算法上來說,這個已經最簡化了。O(n)
回答2: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');
相關文章:
1. html5 - 最近在自學react 求一個react表單提交的例子2. 老師您好!我有一個問題、3. javascript - jq 上傳圖片成功后添加一個新的上傳框時出現問題4. 網站上有個圖標改不了了 求幫忙 是用svg寫的5. 我和老師的代碼對照了幾遍沒發現問題,但是瀏覽器打開就有問題了,求解6. python django工程上傳一張照片調用python方法時報錯,請問如何處理?7. python - Django ManyToManyField 字段數據在 admin后臺 顯示不正確,這是怎么回事?8. javascript - vscode alt+shift+f 格式化js代碼,通不過eslint的代碼風格檢查怎么辦。。。9. python - angular route 與 django urls 沖突怎么解決?10. mysql - 千萬數據 分頁,當偏移量 原來越大時,怎么優化速度
