java - Comment mieux calculer la moyenne de deux données de tableau au même format
巴扎黑
巴扎黑 2017-06-23 09:13:23
0
2
785

Il existe deux JSONArrays avec le même format

L'une concerne les données nouvellement ajoutées

saveArray : [{"name":"name1","value":10},{"name":"name2","value":12},...,{}]

L'une est la donnée moyenne

avgArray : [{"name":"name1","value":11},{"name":"name2","value":13},...,{}]

Connaître le nombre pour calculer la moyenne int num = 10 ;

Ensuite, sur la base des nouvelles données, après avoir calculé la moyenne, mettez à jour l'enregistrement de moyenne existant :

Enfin obtenu :

newAvgArray : [{"name": "nom 1", "valeur": (10 x 11 + 10)/11}, {"name": "nom 2", "valeur": (13 x 10 + 12) /11},...,{}]

La seule façon à laquelle je peux penser est :

for (int i = 0;i < avgArray.size();i++){
   avgObj = avgArray.get(i).get("value");
   addValue = saveArray.get(i).get("value");
   //然后计算新的值保存新的Array
}

Existe-t-il une meilleure façon de calculer

巴扎黑
巴扎黑

répondre à tous(2)
过去多啦不再A梦

Pas plus.

Algorithmiquement parlant, c'est le plus simplifié. 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();
    }

Il devrait y avoir un maître capable d'utiliser lambda pour effectuer l'opération arrogante, mais en ce qui concerne vos besoins, vous ne pouvez que prendre la valeur et la recalculer. De plus, vous devez revoir davantage les questions.
Vous ne pouvez pas effectuer les opérations suivantes. Assurez-vous que la valeur du nom peut correspondre.

   avgObj = avgArray.get(i).get("value");
   addValue = saveArray.get(i).get("value");
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal