Objective-C: die Anzahl der Zeiten, die ein Objekt tritt in ein array?
Muss ich durchführen, was ich fühle, ist eine grundlegende Funktion, aber ich finde keine Dokumentation, wie es zu tun. Bitte um Hilfe!!
Brauche ich, um zu zählen, wie oft ein bestimmtes Objekt erfolgt in einem array. Siehe Beispiel:
array = NSArray arrayWithObjects:@"Apple", @"Banana", @"Cantaloupe", @"Apple", @"DragonFruit", @"Eggplant", @"Apple", @"Apple", @"Guava",nil]retain];
Wie kann ich das array Durchlaufen und zählen die Anzahl der Zeiten, findet er die Zeichenkette @"Apple"?
Jede Hilfe ist willkommen!
Wenn dies ist eine gemeinsame operation, verwenden Sie eine
NSCountedSet
.InformationsquelleAutor EmphaticArmPump | 2011-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Einfache und eindeutige Antwort:
PS: Martin Babacaev die Antwort ist ganz gut. Iteration ist schneller, mit Blöcken, aber in diesem speziellen Fall mit so wenigen Elemente, die ich denke, es gibt keinen erkennbaren Gewinn. Ich verwenden würde, aber 🙂
Du hast Recht... ich wollte es einfach nur deutlicher 😉
Sorry, es hat mich immer zu akzeptieren diese Antwort, aber es sieht aus wie der beste! Danke!
InformationsquelleAutor nacho4d
Eine weitere Lösung, mit Blöcken (Beispiel):
Dank Rob! Fix..
InformationsquelleAutor Martin Babacaev
Als @bbum gesagt, verwenden Sie eine NSCounted gesetzt. Es ist ein Initialisierer thet konvertiert ein array direkt in eine gezählt-set:
NSLog-Ausgabe:
(D [1], M [1], E [1], A [1], B [3], X [2], C [1])
Nur Zugriff auf Elemente:
Nun, ich denke, dass es, eine Methode für die Umwandlung NSCountedSet <-> NSDictionary (Schlüssel der Objekte in den gezählten gesetzt, werden die Werte der zählt) besser wäre, weil die plist wäre kleiner. Ich habe schon gegoogelt und konnte nichts finden. Wahrscheinlich müssen wir die Implementierung einer solchen Methode manuell.
InformationsquelleAutor zaph
Verwenden Sie ein
NSCountedSet
; es werde schneller sein als ein Wörterbuch, und ist so konzipiert, lösen genau dieses problem.InformationsquelleAutor bbum
Kam gerade über diese ziemlich alte Frage. Ich würde empfehlen, mit einem
NSCountedSet
:InformationsquelleAutor tilo
Möchte ich Sie ermutigen, to setzen Sie Sie in einem Wörterbuch (Objective-C version der Karte). Der Schlüssel für das Wörterbuch ist der Gegenstand und der Wert der Zählung. Es sollte ein MutableDictionary natürlich. Wenn das Element nicht gefunden wird, fügen Sie es und legen Sie die Anzahl auf 1.
NSMutableDictionary
mit dem Wert, wieA
als Schlüssel, und der Graf, der Schlüssel wurde gesehen, wie Sie den Wert.InformationsquelleAutor Rob
InformationsquelleAutor pt2ph8
Ich bis-zum Rob ' s Antwort, aber ich wollte fügen Sie einige code, ich hoffe auf etwas Unterstützung.
InformationsquelleAutor csano
Wenn das array sortiert ist, wie in der Aufgabenstellung, dann brauchen Sie nicht ein Wörterbuch.
Finden Sie die Anzahl der eindeutigen Elemente, die Sie effizienter, indem Sie nur das tut, 1 linear sweep und Inkrementieren eines Zählers wenn Sie finden Sie in 2 aufeinander folgenden Elemente sind die gleichen.
Wörterbuch-Lösung ist in O(nlog(n)), während die lineare Lösung ist O(n).
Hier einige pseudo-code für die lineare Lösung:
InformationsquelleAutor Himadri Choudhury
den kompletten code mit Verweis auf @bbum und @Zaph
Danke.
InformationsquelleAutor umakanta
Wenn Sie wollen, dass es mehr generische, oder Sie zählen möchten, ist gleich/verschiedene Objekte in array, versuchen Sie dies:
Zeichen "!" zählen VERSCHIEDENEN Werte. Wenn Sie möchten, GLEICHEN Werte, zu entfernen "!"
hoffe, das hilft der community!
Ich habe es verwendet, fügen Sie die korrekte Anzahl von Abschnitten im uitableview!
InformationsquelleAutor elp
Du tun können diese Art
Das Ergebnis ist, wie : 1
InformationsquelleAutor Banker Mittal