java - Bagaimana untuk mengira purata dua data Array dengan lebih baik dalam format yang sama
巴扎黑
巴扎黑 2017-06-23 09:13:23
0
2
779

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

巴扎黑
巴扎黑

membalas semua(2)
过去多啦不再A梦

Tiada lagi.

Secara algoritma, ini adalah yang paling mudah. 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();
    }

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");
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan