Heim  >  Fragen und Antworten  >  Hauptteil

java - So berechnen Sie den Durchschnitt zweier Array-Daten im gleichen Format besser

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?

巴扎黑巴扎黑2675 Tage vor741

Antworte allen(2)Ich werde antworten

  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-23 09:15:23

    没有了。

    算法上来说,这个已经最简化了。O(n)

    Antwort
    0
  • 为情所困

    为情所困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");

    Antwort
    0
  • StornierenAntwort