Gruppiert Elemente eines Arrays nach einer Eigenschaft

8

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?

    
Alexey K 10.01.2017, 08:43
quelle

5 Antworten

7

Verbesserung der oriyentel-Lösung, um eine geordnete Gruppierung zu ermöglichen:

%Vor%

Dann funktioniert es mit jedem Tupel , struct oder Klasse und für jede Eigenschaft:

%Vor%     
Cœur 20.04.2017 12:49
quelle
1

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.

Verwendungsbeispiel

Ich gebe ein Beispiel mit Ganzzahlen; Es sollte klar sein, wie man einen beliebigen (hashbaren) Typ für T verwendet, einschließlich Date .

%Vor%     
Raphael 10.01.2017 10:49
quelle
1

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.

%Vor%

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.

%Vor%     
oriyentel 20.03.2017 22:18
quelle
1

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%     
golenkovkostya 11.12.2017 18:30
quelle
0

+1 auf GolenKovkosty antworten.

%Vor%

Weitere Beispiele:

%Vor%

Gleichwertig zu

%Vor%

In Ihrem Fall:

%Vor%

Ausgabe:

%Vor%     
Niz 12.12.2017 22:54
quelle