java - So berechnen Sie den Durchschnitt zweier Array-Daten im gleichen Format besser
巴扎黑
巴扎黑 2017-06-23 09:13:23
0
2
778

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 berechnen

Aktualisieren 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?

巴扎黑
巴扎黑

Antworte allen(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");
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage