Ich habe ein Array von Objekten mit der Eigenschaft date
.
Ich möchte Array-Arrays erstellen, in denen jedes Array Objekte mit demselben Datum enthält.
Ich verstehe, dass ich etwas wie .filter
brauche, um Objekte zu filtern, und dann .map
, um alles zum Array hinzuzufügen.
Aber wie man .map
sagt, dass ich ein separates Array für jede Gruppe von gefilterten Objekten haben möchte und dass dieses Array zum "globalen" Array hinzugefügt werden muss und wie man .filter
sagt, dass ich Objekte mit demselben Datum haben möchte?
Wenn Sie einen Schritt abstreiten, wollen Sie Gruppen Elemente eines Arrays durch eine bestimmte Eigenschaft gruppieren. Sie können eine Map die Gruppierung für Sie so machen lassen:
%Vor%Beachten Sie, dass diese Gruppierung stable ist, dh Gruppen werden in der Reihenfolge ihrer Erscheinung angezeigt, und innerhalb der Gruppen erscheinen die einzelnen Elemente in der gleichen Reihenfolge wie im ursprünglichen Array.
Ich gebe ein Beispiel mit Ganzzahlen; Es sollte klar sein, wie man einen beliebigen (hashbaren) Typ für T
verwendet, einschließlich Date
.
Rapheals Lösung funktioniert. Ich würde jedoch vorschlagen, die Lösung zu ändern, um die Behauptung zu untermauern, dass die Gruppierung tatsächlich stabil ist.
Wie es jetzt aussieht, wird grouped()
zurückgeben ein gruppiertes Array, aber nachfolgende Aufrufe könnten ein Array mit Gruppen in einer anderen Reihenfolge zurückgeben, obwohl die Elemente jeder Gruppe in der erwarteten Reihenfolge sind.
Jetzt, da wir die Reihenfolge, in der wir neue Gruppierungen entdecken, verfolgen, können wir ein gruppiertes Array konsistenter zurückgeben, als uns nur auf die ungeordnete values
-Eigenschaft eines Dictionary zu verlassen.
Es könnte spät sein, aber das neue Xcode 9 SDK Wörterbuch hat eine neue init Methode
%Vor%Dokumentation hat ein einfaches Beispiel, was diese Methode macht. Ich poste gerade dieses Beispiel unten:
%Vor%Ergebnis wird sein:
%Vor%Tags und Links arrays data-structures swift grouping