Rumah > Soal Jawab > teks badan
Terdapat dua JSONArrays dengan format yang sama
Satu adalah data yang baru ditambah
saveArray: [{"name":"name1","value":10},{"name":"name2","value":12},...,{}]
Salah satunya ialah data purata
avgArray: [{"name":"name1","value":11},{"name":"name2","value":13},...,{}]
Ketahui nombor untuk mengira purata int num = 10;
Kemudian berdasarkan data baharu, selepas mengira purata, kemas kini rekod purata sedia ada:
Akhirnya dapat:
newAvgArray: [{"name":"name 1","value":(10 x 11 + 10)/11},{"name":"name 2","value":(13 x 10 +12) /11},...,{}]
Satu-satunya cara yang saya boleh fikirkan ialah:
for (int i = 0;i < avgArray.size();i++){
avgObj = avgArray.get(i).get("value");
addValue = saveArray.get(i).get("value");
//然后计算新的值保存新的Array
}
Adakah cara yang lebih baik untuk mengira
为情所困2017-06-23 09:15:23
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();
}
Seharusnya ada master yang boleh menggunakan lambda untuk melakukan operasi sombong, tetapi setakat keperluan anda, anda hanya boleh mengambil nilai dan mengiranya semula, anda perlu menyemak soalan dengan lebih lanjut.
Anda tidak boleh melakukan operasi berikut. Pastikan nilai nama boleh sepadan.
avgObj = avgArray.get(i).get("value");
addValue = saveArray.get(i).get("value");