2D-Arrays mit NSMutableArray
Brauche ich zum erstellen einer veränderlichen zwei-dimensionalen Arrays in Objective-C.
Ich habe zum Beispiel:
NSMutableArray *sections;
NSMutableArray *rows;
Jedes Element in sections
besteht aus einem array rows
. rows
ist ein array, das Objekte enthält.
Und ich möchte so etwas wie dies:
[ sections[i] addObject: objectToAdd]; //I want to add a new row
Um so etwas wie dieses:
Abschnitt 0, Zeilen: obj1, obj2, obj3
Abschnitt 1, Zeilen: obj4, obj5, obj6, obj 7...
Gibt es eine Möglichkeit zu tun, dass in Objective-C?
InformationsquelleAutor der Frage Ilya Suzdalnitski | 2009-04-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst müssen Sie reservieren und initialisieren Sie Objekte vor Ihrer Verwendung so etwas wie:
NSMutableArray * sections = [[NSMutableArray alloc] initWithCapacity:10];
Für die Zeilen, die Sie benötigen, ein Objekt für jeden, nicht eine einzigeNSMutableArray * rows;
Zweiten, je nachdem, ob Sie mithilfe von Xcode 4.4+ (die eingeführt subscripting, ein.k.ein
section[i]
§ion[i] = …
) Sie können die Nutzung[sections objectAtIndex:i]
für das Lesen und[section replaceObjectAtIndex:i withObject: objectToAdd]
für das schreiben.Dritte, ein array nicht haben Löcher, d.h., obj1, null, obj2. Sie müssen eigentliche Objekt zu jedem index. Wenn Sie das tun, müssen nichts, Sie können
NSNull
Objekt.Außerdem, vergessen Sie nicht, dass Sie können auch speichern Objective-C-Objekte in einfache C-arrays:
InformationsquelleAutor der Antwort mouviciel
Wenn Sie möchten, tun Sie dies mithilfe von arrays können Sie intialize Ihre
sections
array, fügen Sie dann ein Zeilen-array wie folgt:Wenn Sie möchten, fügen Sie diese Zeilen Objekt an einem bestimmten index, verwenden Sie die folgende:
Können Sie dann ändern Sie diese Zeilen-array durch Aufruf der array:
Konnte man immer erstellen Sie Ihre eigenen Klasse namens
Section
hat eineNSMutableArray
Mitglied genanntrows
; dann speichern Sie Ihre Zeilen in das array und speichern Sie dieSection
Objekte in einem array:Dann erstellen Sie einfach
Section
Elemente, und Sie können Methoden innerhalb Ihrer Klasse hinzufügen/entfernen der Zeile Elemente. Dann Verpacken Sie alleSections
Elemente in ein anderes array:Diese wird mehr nützlich, wenn Sie möchten, fügen Sie weitere Eigenschaften für jedes
Section
Instanz.InformationsquelleAutor der Antwort Alex Rozanski
Die Sprache hat keine Unterstützung für multi-dimensionales Objekt-orientierte arrays, aber man kann sich damit eine Klasse, hat es mit einem NSMutableArray voller NSMutableArrays, wie die folgenden. Ich habe nicht versucht, zu kompilieren oder alles, ich schrieb es in.
Möchten, verwenden Sie es wie folgt:
InformationsquelleAutor der Antwort Jack Nutting
was solls. Solange wir die Wiederbelebung dieser Frage, hier ist etwas für das Alter von literal-Sammlung syntax und visual format-interpretation!
Falls sich jemand wundert, das funktioniert:
Ergebnis: "Oh, Hallo James!"
Natürlich gibt es das problem, zu versuchen so etwas wie
multi[3][5] = @"?"
und immer ein Ungültiger index exception, also schrieb ich eine Kategorie für NSMutableArray.Wie Sie sehen können, haben wir eine bequeme Methode, um ein array voller
NSNull
so dass Sie können Indizes mit wilden aufzugeben.Zweitens, es gibt eine rekursive Methode, die analysiert einen string, der mit einem visuellen format wie:
[3][12]
(3 x 12 array). Wenn Ihr string ist ungültig in gewisser Weise die Methode zurücknil
aber wenn es gültig ist, bekommen Sie eine ganze mehrdimensionales array der Größe, die Sie angeben.Hier sind einige Beispiele:
Können Sie so viele Dimensionen, wie Sie in der visual format-Methode, und dann greifen Sie die literal syntax, etwa so:
Sowieso, Taten dies mehr als eine übung, als alles andere; es ist wahrscheinlich ziemlich effizient in den großen Plan der Dinge...wenn man bedenkt, wie wie wir mehrdimensionale arrays in Objective-C-Objekt-Zeigern.
InformationsquelleAutor der Antwort Matt Mc
Dank Jack für seinen code habe ich über ihn ein wenig; ich muss ein mehrdimensionales nsmutablearray für Streicher in einem meiner Projekt , es hat immer noch einige Dinge, die behoben werden müssen, funktioniert aber nur Zeichenfolgen im moment , werde ich es hier posten , ich bin offen für Vorschläge bitte, denn ich bin nur ein Anfänger in objective-c im moment...
Dies gut funktioniert !!!
ich bin derzeit mit, wie diese
Danke nochmal Jack !!
InformationsquelleAutor der Antwort Jericho
FYI: Jack ' s code muss ein Haufen Arbeit, bevor es funktioniert. Unter anderem wird der autorelease verursachen können die Daten freigegeben werden, bevor Sie darauf zugreifen und seine Verwendung ruft die Klasse die Methode arrayWithSections:Zeilen: wenn es tatsächlich ist definiert als sectionArrayWithSections:Zeilen:
Kann ich versuchen zu posten eigentlichen code später, wenn ich eine chance bekomme.
InformationsquelleAutor der Antwort
Wiederbelebung eines alten Threads, aber habe ich überarbeitet Jack ' s code so 1 zu. es kompiliert und 2. es ist in der Reihenfolge der 2D-c-arrays [Zeilen][Spalten] anstelle von [Abschnitte(Spalten)] [, Zeilen], wie er es hat. Hier gehen Sie!
TwoDArray.h:
TwoDArray.m:
InformationsquelleAutor der Antwort Matt Cooper
Dies ist, was ich Tat, um zu initialisieren array von arrays.
Dann später im code konnte ich einfach:
InformationsquelleAutor der Antwort Mantvydas