Sortieren-array in Swift Aufsteigend mit leeren Elementen
In Xcode (Swift) ich habe ein array initialisiert wird, um 100 leere Elemente:
var persons = [String](count:100, repeatedValue: "")
Mit einigen Funktionen, die ich hinzufügen von Inhalten zu den Orten, die in dem array, beginnend bei 0.
So zum Beispiel mein array ist auf einen bestimmten moment:
["Bert", "Daniel", "Claire", "Aaron", "", "", ... ""]
Mit den Punkten repräsentiert die Ruhe der leeren Elemente. Ich benutze diese Funktion für die Sortierung meiner array alphabetisch:
persons = persons.sorted {$0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
Das gibt mir ein array zurück wie diese:
["", "", ... , "Aaron", "Bert", "Claire", "Daniel"]
Was ich will, ist eine Art meine array alphabetisch, aber nicht mit den leeren Elementen an der front. Ich brauche, um ein array zurück wie:
["Aaron", "Bert", "Claire", "Daniel", "", "", ... , ""]
Ich für meinen Teil will nicht, dass ein array mit leeren Elementen, aber ich fand, ich konnte nicht fügen Sie einen Wert, um mein array, wenn ich nicht erklären, wie ein 100-Elemente (das array wird nicht gefüllt werden zu 100 items, das ist sicher).
Kann jemand mir helfen?
- Nicht sicher, was du damit meinst "ich fand, ich konnte nicht fügen Sie einen Wert, um mein array, wenn ich nicht erklären, wie ein 100-Elemente". Meinst du, dass Sie nicht Anhängen Elemente in das array?
- Und der code sortiert die Elemente in absteigender Reihenfolge (wie auch erwähnt in den Titel). Dies würde, um die leeren Saiten reicht. Dein Beispiel Ausgabe entspricht nicht dem code.
- Nein, was ich möchte, ist ein array, das kann ich Werte hinzufügen und entfernen von Werten aus. Ideal ist diese Arrays enthalten nur die Werte und keine leeren Elemente, so würde es nur so lange wie erforderlich zu jeder Zeit. Wenn ich brauche, um einen Wert hinzuzufügen, bräuchte ich ein neues Element in das array. Ich nur wählte, um ihm 100 Elemente mit dem Wert "" also ich würde immer Platz für einen neuen Wert. Weißt du, was ich meine?
- Ja, Sie sind richtig. Kopiert habe ich das falsche Teil, sorry. Ich habe aktualisiert mein original-post.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als @Antonio sagte, es sieht aus wie Sie benötigen absteigend set von strings. Neben der
Dictionary
Methode in @Antonio ' s Antwort (die Super funktioniert), können Sie auchNSMutableSet
(gebrückt von Objective-C):Schafft das set:
Dann, wenn Sie wollen, dass die Menschen als
Array
verwenden, können Sie dieallObjects
Besetzung auf ein[String]
:Und Sortieren Sie es so, wie Sie gerade tut:
Macht
people
:Für diejenigen Fragen, wie man die
Array
als ursprünglich angegeben in die Frage (Aufsteigend aber mit leeren Zeichenfolgen am Ende), dass kann getan werden, mit ein bisschen benutzerdefinierte Logik in der sort-Funktion:Ergebnis:
Dictionary
Methode oderNSMutableSet
anstatt Sie vorab eineArray
mit leeren Zeichenfolgen; es werden viel effizienter.Lesen Kommentare in deiner Frage und andere Antworten, ich erkennen, dass Sie brauchen eine geordnete Menge, enthalten eindeutige Werte. Es gibt keine eingebaute Datenstruktur in swift, aber es kann leicht getan werden, indem mit einem Wörterbuch: nutzen Sie einfach die Zeichenfolge Wert als dictionary-Schlüssel, und ein boolean als Wörterbuch-Wert - dadurch wird sichergestellt, dass die Schlüssel eindeutig sind:
Können Sie schnell überprüfen, ob mit dem obigen code wird das Wörterbuch enthält 4 Elemente.
Nächsten, erhalten Sie eine Kopie des dictionary-keys (als ein array):
und Sortieren:
Alternativ, wenn Sie wollen stick mit fester Größe array, können Sie entfernen Sie die leeren Elemente vor dem Sortieren:
nil
zum Beispielpersons["Clair"] = nil
persons["Clair"] = true
?Dictionary
,persons["Pete"] = nil
entfernt es aus derDictionary
. Mit diesen Methoden können Sie hinzufügen und entfernen Sie alle Gegenstände, die Sie benötigen.Ich denke, Sie sind verwirrt über arrays. Swift-arrays sind nicht statisch zugeordneten Strukturen, die bereitgestellt werden muss und gefüllt, um die maximale design-Kapazität. Unten ist ein grobes Beispiel dafür, wie Sie das erreichen können, was die meisten von Ihnen äußern hier. Jedoch, ich glaube wirklich, dass ein Wörterbuch ist besser geeignet für Ihre Bedürfnisse.