2017-03-02 3 views
-1

Lassen Sie mich ein Beispiel geben. Während 5 Stunden erhalte ich Daten, Double (mit 0-2 Werten wie 1.4525), die Gesamtmenge der Werte wird bis zu 5-10k betragen, also werden es mehrere Werte pro Sekunde sein. Ich muss es irgendwo während dieser Sitzung speichern und danach den Durchschnittswert aller Werte berechnen. Die App wird in einem Vordergrund arbeiten.Schnell. Speicherung großer Zahlen und Mittelwertbildung

Ich bin mir nicht sicher, wie man mit so großen Daten umgehen soll. So habe 2 Fragen:

  • wo sie speichern (lokale Datei im Speicher als Array?)
  • wie berechnen Durchschnitt aus einer solchen großen Menge
  • (wie aus kleinen (sum/count)?)
+0

Das ist nicht viel, machen Sie es auf die einfachste Art. Wenn Sie nur den Durchschnitt brauchen, können Sie einfach eine laufende Summe behalten und statt aller Werte zählen. – pvg

Antwort

1

10.000 verdoppelt, bei 8 Bytes pro Element, ist nur 80.000 Bytes (80k). Das ist eine ziemlich kleine Menge an Daten. Sie können dafür ein speicherinternes Double-Array verwenden.

Leistungsmäßig würde es ein modernes iPhone einen Bruchteil einer Sekunde brauchen, um 10.000 Zusätze und eine Abteilung zu tun. Sie können den Durchschnitt jederzeit ohne viel Geschwindigkeit berechnen. Es ist nur, wenn Sie es in einer Schleife immer und immer wieder tun, wo Sie eine Leistungseinbuße sehen würden.

Wie pvg in seinem Kommentar darauf hingewiesen, wenn alles, was Sie jemals brauchen, der Durchschnitt ist, dann können Sie einfach eine Summe und die Anzahl der Werte speichern, die nur 2 Doppel sein würden, nicht 10.000 von ihnen. (Sie würden nur jeden neuen Wert der Summe addieren, erhöhe den Zähler, und dann den Mittelwert neu berechnet werden als:.

ave = sum/count 

Sie auch Ihr Array zu einem NSArray gegossen und schreiben konnte es ganz leicht zu einem plist

Verwandte Themen