Ein Array in Swift in Unter-Arrays aufteilen

8

Problem

Gegeben sei ein Array von Werten Wie kann ich es in sub-arrays aus gleichwertigen Elementen aufteilen?

Beispiel

Gegeben dieses Array

%Vor%

Ich möchte diese Ausgabe

%Vor%

Was ich NICHT suche

Ein möglicher Weg, dies zu lösen, wäre eine Art Index zu erstellen, der das Vorkommen jedes Elements wie folgt anzeigt.

%Vor%

Und schließlich verwenden Sie den Index, um das Ausgabe-Array neu zu erstellen.

%Vor%

Aber mit dieser Lösung verliere ich die ursprünglichen Werte. Natürlich ist es in diesem Fall kein großes Problem (ein Int -Wert ist immer noch und Int , selbst wenn er neu erstellt wurde), aber ich möchte diese Lösung auf komplexere Datenstrukturen wie diese anwenden

%Vor%

Abschließende Überlegungen

Die Funktion, nach der ich suche, wäre eine Art Umkehrung von flatten() , infact

%Vor%

Ich hoffe, ich habe mich klar ausgedrückt, lassen Sie es mich wissen, wenn Sie weitere Informationen benötigen.

    
Luca Angeletti 22.07.2016, 17:24
quelle

3 Antworten

10
%Vor%

[EDIT] wurde geändert, um Set Initializer wie von Hamish vorgeschlagen zu verwenden

[EDIT2] Swift 4 hat Dictionary einen Initialisierer hinzugefügt, der das effizienter macht:

%Vor%     
Alain T. 22.07.2016, 18:02
quelle
3

Wenn Sie CocoaPods / Carthage / Swift Package Manager / etc. Sie könnten Pakete wie oisdk / SwiftSequence verwenden, die die group() -Methode bereitstellen:

%Vor%

oder UsrNameu1 / TraverSwift , das groupBy :

bereitstellt %Vor%

Wenn Sie keine externen Abhängigkeiten hinzufügen möchten, könnten Sie immer einen Algorithmus schreiben wie:

%Vor%     
kennytm 22.07.2016 17:53
quelle
1

Nehmen wir an, Sie haben ein unsortiertes Array von Elementen. Sie müssen das anfängliche Array sortieren, dann haben Sie so etwas: [1, 1, 1, 3, 3, 4]

Danach initialisieren Sie zwei Arrays: eines für das Speichern von Arrays und ein weiteres für die Verwendung als aktuelles Array.

Schleife durch das ursprüngliche Array und:

  • Wenn sich der aktuelle Wert nicht von dem letzten unterscheidet, drücken Sie ihn auf das aktuelle Array
  • Drücken Sie andernfalls das aktuelle Array auf das erste und leeren Sie das aktuelle Array.

Hoffe es hilft!

    
Alexandru 22.07.2016 17:49
quelle

Tags und Links