Heim > Fragen und Antworten > Hauptteil
Es gibt zwei JSONArrays mit demselben Format
Eins sind neu hinzugefügte Daten
saveArray: [{"name": "name1", "value":10},{"name": "name2", "value":12},..., {}]
Eins sind die durchschnittlichen Daten
avgArray: [{"name": "name1", "value":11},{"name": "name2", "value":13},..., {}]
Kennen Sie die Zahl, um den Durchschnitt int num = 10;
zu berechnenAktualisieren Sie dann basierend auf den neuen Daten nach der Berechnung des Durchschnitts den vorhandenen Durchschnittsdatensatz:
Endlich habe ich:
newAvgArray: [{"name": "Name 1", "Wert": (10 x 11 + 10)/11}, {"name": "Name 2", "Wert": (13 x 10 + 12) /11},...,{}]
Der einzige Weg, der mir einfällt, ist:
for (int i = 0;i < avgArray.size();i++){
avgObj = avgArray.get(i).get("value");
addValue = saveArray.get(i).get("value");
//然后计算新的值保存新的Array
}
Gibt es eine bessere Möglichkeit, es zu berechnen?
为情所困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();
}
应该有大神能够用lambda骚气的操作,但就你的要求而言,只能取值重新计算,另外,你要多审题。
不能下面这种操作,要确保name的值能够对应上。
avgObj = avgArray.get(i).get("value");
addValue = saveArray.get(i).get("value");