• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Cocoa Dictionary Zugriff

zorn

Zuccalmaglios Renette
Registriert
18.02.06
Beiträge
260
Hallo,

eine Frage zu Dictionaries:

Ich brauche eine Datanstruktur von String-Paaren, z.B. "frosch" "grün", dachte dass man das wunderbar per Dictionary lösen könnte. Allerdings möchte ich nicht per key auf die Inhalte Zugreifen, sondern wie bei einem Array per Position. Ist das möglich, oder muss ich doch zwei Arrays statt einem Dictionary nehmen?

(Ich möchte also z.B. Objekt und Key von Position 15 abrufen, was z.B. die beiden strings "frosch" und "grün" wären)

Die Struktur ist nicht mutable, könnte ich also easy und gefahrlos mit 2 Arrays lösen, dachte nur dict wäre eleganter...
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Allerdings möchte ich nicht per key auf die Inhalte Zugreifen, sondern wie bei einem Array per Position. Ist das möglich
Nein, ein Dictionary hat keinen Index, über den man zugreifen könnte. Dafür gibt es ja Arrays.

MacApple
 

zorn

Zuccalmaglios Renette
Registriert
18.02.06
Beiträge
260
Thx!

Dachte eben dass der Sinn eines Dict eben die Paar-Struktur ist, nicht der Key-Zugriff, dann hätte ein Zugriff per Index Sinn gemacht - jedenfalls hab' ich mir das in meinem Anfänger Mind-Set so zusammengesponnen 8)
 

Peter Maurer

Pommerscher Krummstiel
Registriert
16.03.04
Beiträge
3.077
Mach's doch so:

Code:
[NSArray arrayWithObjects: [NSDictionary dictionaryWithObject: @"frosch" forKey: @"gruen"], ... , nil]
Und wenn nicht eindeutig ist, was Key ist und was Value, dann einfach so:

Code:
[NSArray arrayWithObjects: [NSArray arrayWithObjects: @"frosch", @"gruen", nil], ... , nil]
Das mag ein wenig langsamer und speicherfressender sein als andere Loesungen, aber das ist ja nur selten ein echtes Problem.

--

Abgesehen davon kannst Du auf die Dictionary-Keys oder ~Values natuerlich per Index zugreifen, wenn Du ein Sortierkriterium festlegst und sie nach eben diesem Kriterium sortierst, wann immer es noetig ist. Das mach' ich auch oefter, und man kann die sortierten Werte bei Bedarf ja auch cachen.
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
Noch ne Möglichkeit ist, dass du Dir über allKeys ein Array mit allen Keys holst. Das Array kannst Du dann so durch wandern wie Du magst und dann per Key die Werte aus dem Dictionary ziehst. Aber das wäre schon irgendwie "vom Auge durch die Brust ins Knie" ;)
 

Peter Maurer

Pommerscher Krummstiel
Registriert
16.03.04
Beiträge
3.077
Das hat jetzt nur bedingt mit der eigentlich Frage zu tun, aber weil ich erst neulich wieder ein wenig darueber nachgedacht habe...

Noch ne Möglichkeit ist, dass du Dir über allKeys ein Array mit allen Keys holst. Das Array kannst Du dann so durch wandern wie Du magst und dann per Key die Werte aus dem Dictionary ziehst. Aber das wäre schon irgendwie "vom Auge durch die Brust ins Knie" ;)
Ich denke, das kann durchaus nuetzlich sein; und ich hab' genau das im letzten Absatz des Beitrags ueber Deinem gemeint. Hier ein Echte-Welt-Beispiel, bei dem ich diese Taktik tatsaechlich anwende:

Fuer ein Programm, bei dem der Nutzer Werte fuer Schlagwoerter angeben kann (z.B.: "Genre: Comedy", "Year: 2007", etc. -- in Wirklichkeit etwas komplizierter), ist die Reihenfolge dieser Schlagwoerter -- von der Funktion her -- voellig irrelevant. Die Key/Value-Paare sollten aber trotzdem in einer definierten Reihenfolge dargestellt werden (NSTableView), weil der Nutzer sich sonst nicht zurechtfindet.

Also sortiere ich die Key/Value-Paare tatsaechlich nach den Keys und behalte trotzdem intern die Datenstruktur, die meiner Vorstellung des Datensatzes am naehesten kommt. Und das macht mir die Denkerei beim Programmieren leichter. :)
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Danger, Wil Robinson, Danger!

"- (NSArray *)allKeys

The order of the elements in the array is not defined"

Alex
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
Wenn ich den Peter richtig Verstanden hab sortiert er den Array dann mit einer der sortedArray..-Methoden.

Die Keys sind dann sortiert, das Dictionary bleibt aber dann wie es ist.

Wenn meine Vermutung falsch ist: Ich bin für Prügel offen.... aber nur rein verbal ;)
 

Peter Maurer

Pommerscher Krummstiel
Registriert
16.03.04
Beiträge
3.077
Ja. Ich sollte das Wort "sortieren" noch viel oefter in meine Beitraege einstreuen... :D
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Ich sollte Beiträge vielleicht genauer lesen...

Was ich vor allem sagen wollte: Ohne sortieren darf man sich NICHT darauf verlassen, welche Reihenfolge die Keys im Array haben. Das gilt insb., wenn man allKeys mehrmals abholt.

Das ganze ist ja dann auch mehr eine Methode für statische Dictionaries, bei mutable wird es entsprechend schwerer wenn ich mich auf den Index verlassen muss.

Alex
 

zorn

Zuccalmaglios Renette
Registriert
18.02.06
Beiträge
260
Schätze das mit dem Indexierten Dictionary ist mir zu heikel. Werde also zwei Arrays nehmen, oder wahrscheinlich sogar CoreData. Dachte zwischenzeitlich ich kann mein Problem damit nicht lösen, aber da bin ich wohl kurz vom Pfad abgekommen...