2017-05-15 1 views
0

Ich habe eine Reihe von Strings mit einer großen Menge von Daten, von denen nur einige von mir wollen. Ich Trennung der guten Daten unter Verwendung eines Separators, wie:Swift 3 Sortieren großer Datenmengen in Arrays

var result = contentArray[1].components(separatedBy: ",") 

Dies lässt mich mit garbage Daten in geradzahlige Anzahl Indizes des Ergebnisarray und gute Daten in ungerade numerierten Indizes.

Jetzt möchte ich nur mit den guten Daten arbeiten, um die Dinge später einfach zu machen. Ich kann das tun, indem ich ein anderes Array unter Verwendung einer For-In-Schleife mit Schritt ...

Aber das scheint wie mindestens ein zusätzlicher Schritt. Gibt es eine Möglichkeit, die Daten im ersten Array zu sortieren, ohne 2 Arrays zu erstellen? Das würde die App veranlassen, 3 Arrays mit großen Datenmengen zu erstellen, wenn es so aussieht, als ob ich es in 1 oder 2 machen könnte. Ich plane dies mit mindestens 20 Datensätzen, so dass das viel mehr zu sein scheint Arrays im Speicher

+1

Warum vorzeitig optimieren? Mein Vorschlag ist, dass es zuerst funktioniert, einige Leistungstests durchführt und nur bei Bedarf optimiert. – nathan

+1

@nathan guter Punkt. Ich neige dazu, mich schon früh zu ärgern. Warum muss ich extra arbeiten, wenn ich nicht muss? brilliant – froggomad

+0

Beachten Sie, dass die meisten Basis-Swift-Typen copy-on-mutate sind. Wenn Sie die tatsächlichen Daten nicht ändern, machen Sie wahrscheinlich nur zusätzliche Referenzen (kleiner Footprint) und kopieren nicht wirklich alle Daten. – PeejWeej

Antwort

1

Sie können so gehen.

let filterArray = result.indices.flatMap { $0 % 2 != 0 ? nil : result[$0] } 
print(filterArray) 

Edit: Wenn Sie Ausgabe des Filters speichern möchten in gleichen Array wie folgt versuchen.

var result = contentArray[1].components(separatedBy: ",") 
result = result.indices.flatMap { $0 % 2 != 0 ? nil : result[$0] } 
print(result) 
+1

Ist das nicht nur ein drittes Array, was ich vermeiden möchte? – froggomad

+0

@froggomad Überprüfen Sie die bearbeitete Antwort –

+0

Danke, das sieht gut aus. Ich bin nicht vertraut mit flatMap-Syntax, und der Compiler wirft Verwendung von unaufgelösten Identifier-Array (zeigt auf: Array [$ 0]) – froggomad

Verwandte Themen