2009-07-21 15 views
0

ich eine NSMutableDictionary mit den notwendigen Strings erstellt und id ‚s
es wie diesedie Suche nach einem String mit seinem entsprechenden Wert (oder etwas anderes) in einem NSDictionary Datei

Wurzel ein wenig aussieht

| |

Zeilen

|| - element1 (besteht aus Schlüssel Übung und einen String: Test + ein Schlüssel-ID und einen String: OIK74)

|| - Element2 (besteht aus Schlüssel Übung und einem String: testing3 + eine Schlüssel-ID und einem String: 424RE)

|| - Item3 (besteht aus Schlüsselübung und einer Zeichenfolge: testing5 + eine Schlüssel-ID und eine Zeichenfolge: RET23)

Meine Frage wie suche ich die Schlüssel-ID natürlich mit der Übung Zeichenfolge entsprechen.

In einem Array kann ich es einfach vergleichen mit ContainsObject.

Ich möchte das gleiche tun und die entsprechende Zeichenfolge abrufen. Ich möchte diese zum Beispiel tun (nur so werden die Leute auf die Idee kommen)

ThisDictionary containsObject LookForObject

Und wenn ich Schlüssel finden ID = OIK74 dann würde Ich mag die Zeichenfolge Tests mit ihm bekommen. Ich habe diese Suche mit xmlparsing gemacht, aber ich habe mich gefragt, ob es einen schnelleren Weg geben muss, um die ID und die entsprechende Zeichenfolge zu bekommen.

Antwort

1

Sie können den Wert für einen Schlüssel in einem Wörterbuch mit objectForKey: nachschlagen. Zum Beispiel:

NSString* exercise = [dictionary objectForKey:@"OIK74"]; 

Weitere Informationen finden Sie unter NSDictionary Class Reference.

+0

Wahr, aber wie bekomme ich den entsprechenden Trainingswert ("Testen"). Weil Sie so eine Trainingszeichenfolge mit dem Schlüsselwert füllen. –

+0

Diese Methode ruft den Wert 'testing' ab. Wenn Sie auch die Schlüssel benötigen - d. H. Wenn Sie sie nicht im Voraus kennen, erhalten Sie nur ein Wörterbuch - dann hat die NSDictionary-Klasse auch Methoden, um alle Schlüssel und alle Werte abzurufen. Siehe den von Will bereitgestellten Klassenreferenzlink. – frankodwyer

0

Ich denke, das OP will "testen", indem es nach "OIK74" sucht.

Das erste, was ich vorschlagen würde ist, dass Sie OIK74 den Schlüssel machen und dann den String-Wert abrufen ist trivial. Wenn jede Ihrer Zeilen den gleichen Exercise-Schlüssel hat, scheint das überflüssig zu sein, wenn es aussieht, dass die ID tatsächlich eine ID ist, die eindeutig sein sollte und recht gut als Schlüssel dienen würde.

Wenn Sie auf diese Datenanordnung eingestellt sind (was ich noch einmal sagen werde, sollte ich, falls möglich, noch einmal nachschlagen), dann sehen Sie etwas anderes als einfaches Keypath-Bohren. Sie suchen den Wert eines Geschwisterknotens im Wörterbuch für Ihre bestimmte Zeile. NSXMLDocument kann das ganz einfach mit XPath-Abfragen, glaube ich. Die konzeptionelle Barriere hier ist, dass NSDictionary die Struktur von Plists widerspiegelt, aber ein NSDictionary ist nicht wirklich XML. Sie haben keine Tags und Werte. Sie haben Schlüssel und Werte. In der XML/plist-Darstellung des NSDictionary sind die Tags <key> und <value> und Ihre NSDictionary-Schlüssel und -Werte sind die Werte in diesen Tags.

Ich bin nicht 100% sicher, was die interne Struktur der Daten, die Sie skizziert haben, aber es sieht aus wie Sie so etwas wie

root = (
    item1 = { 
     Exercise = "testing", 
     ID = "OIK74" 
    } 
    item2 = { 
     Exercise = "testing3", 
     ID = "424RE" 
    } 
    item3 = { 
     Exercise = "testing5", 
     ID = "RET23" 
    } 
) 

in Text plist-Format haben. Ist das richtig? Wenn ja, was würde ich vorschlagen, ist dies völlig in eine viel einfachere Struktur neu anordnen:

{ 
    "OIK74" = "testing", 
    "424RE" = "testing3", 
    "RET23" = "testing5" 
} 

Wenn Sie mehr Daten für diese IDs haben, dann können Sie ein Wörterbuch als Wert für den Schlüssel wie folgt festgelegt:

Da Sie erwähnt haben, dass der OIK74-Wert, nach dem Sie suchen, ein Schlüssel ist, macht dieser Ansatz IMHO viel mehr Sinn. Mit dieser neuen Datenstruktur erhalten Sie den Wert "testing" entweder mit [dictionary valueForKey:@"OIK74"]; oder . Ich hoffe, das hilft.

Verwandte Themen