immutable.js Filter und mutieren (entfernen) gefundene Einträge

8

Ich habe zwei Schleifen, eine für jeden Tag des Monats, andere mit allen Ereignissen für diesen Monat. Sagen wir, ich habe 100.000 Ereignisse. Ich suche nach einer Möglichkeit, Ereignisse von den Hauptereignissen List zu entfernen, sobald sie "verbraucht" wurden.

Der Code ist etwas wie:

%Vor%

Mit lodash könnte ich einfach so etwas tun wie:

%Vor%

Wie erreiche ich dieselbe Optimierung mit immutablejs? Ich erwarte nicht wirklich eine Lösung für meine Art der Iteration der Liste, aber für eine schlaue Art, die Ereignisse List so zu reduzieren, dass sie immer kleiner werden.

    
enapupe 22.11.2016, 17:44
quelle

2 Antworten

4

Sie können Map mit Ereignissen versuchen, die in Bins aufgeteilt sind - basierend auf Ihrem Beispiel, basierend auf Daten - können Sie einen Behälter suchen, ihn als Stapel verarbeiten und ihn entfernen (1). Unveränderliche Karten sind ziemlich preiswert und viel besser, als über Listen zu iterieren. Sie können die Kosten für ein einmaliges Binning übernehmen, aber über O (1) -Lookups amortisieren.

Vielleicht so etwas:

%Vor%     
Asti 25.11.2016, 15:46
quelle
1

Indem Sie bereits verarbeitete Elemente remobieren, werden Sie nichts schneller machen. Die Kosten aller Filteroperationen werden im Durchschnitt halbiert, aber das Erstellen der neuen Liste in jeder Iteration wird einige CPU-Zyklen kosten, so dass es nicht wesentlich schneller wird (in einem großen O-Sinne). Stattdessen könnten Sie basierend auf initialDate -s einen Index erstellen, z. B. eine unveränderbare Karte, wodurch alle Aufrufe von filter unnötig werden.

%Vor% %Vor%
    
Tamas Hegedus 25.11.2016 16:27
quelle