1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Cocoa Dictionary Zugriff

Dieses Thema im Forum "OS X-Developer" wurde erstellt von zorn, 19.07.07.

  1. zorn

    zorn Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    18.02.06
    Beiträge:
    251
    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...
     
  2. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Nein, ein Dictionary hat keinen Index, über den man zugreifen könnte. Dafür gibt es ja Arrays.

    MacApple
     
  3. zorn

    zorn Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    18.02.06
    Beiträge:
    251
    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)
     
  4. Peter Maurer

    Peter Maurer Carmeliter-Renette

    Dabei seit:
    16.03.04
    Beiträge:
    3.274
    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.
     
  5. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    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" ;)
     
  6. Peter Maurer

    Peter Maurer Carmeliter-Renette

    Dabei seit:
    16.03.04
    Beiträge:
    3.274
    Das hat jetzt nur bedingt mit der eigentlich Frage zu tun, aber weil ich erst neulich wieder ein wenig darueber nachgedacht habe...

    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. :)
     
  7. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Danger, Wil Robinson, Danger!

    "- (NSArray *)allKeys

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

    Alex
     
  8. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    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 ;)
     
  9. Peter Maurer

    Peter Maurer Carmeliter-Renette

    Dabei seit:
    16.03.04
    Beiträge:
    3.274
    Ja. Ich sollte das Wort "sortieren" noch viel oefter in meine Beitraege einstreuen... :D
     
  10. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    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
     
  11. zorn

    zorn Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    18.02.06
    Beiträge:
    251
    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...
     

Diese Seite empfehlen