2017-05-26 5 views
-2

In meinem speziellen Fall habe ich NSDictionary Objekt, das NSString Objekte als Schlüssel und NSString und NSDictionary Objekte als Werte enthalten kann. Die inneren Wörterbücher können auch NSDictionary Objekte enthalten.Iterate alle inneren NSDictionary Elemente und ändern Sie sie?

Was ist, wenn ich alle inneren NSString Objekte iterieren und einen Brief an sie anhängen muss? Hinweis: Ich brauche beide Werte sich ändern und Tasten

+1

Bitte geben Sie an, ob Sie in Obj-C oder Swift arbeiten. – Hamish

+0

@Hamish Verändert sich 'NSDictionary' anders, wenn es in Swift eingebunden wird? – Willeke

+1

'NSDictionary' ist nicht änderbar. – Willeke

Antwort

1

In Swift:

func adjustNextLayer(inDictionary dictionary: inout [String:Any], for key: String) { 
    if let newString = myDictionary[key] as? String { 
     myDictionary[key] = "\(newString) insert some text to append here" 
    } else { 
     If let newDictionary = myDictionary[key] as? [String: Any] { 
      newDictionary.keys.foreach { key in 
       adjustNextLayer(inDictionary: newDictionary, for: key} 
       myDictionary[key] = newDictionary 
      } 
     } 
    } 
} 

let myDictionary = ["a":1, "b":2] 
let keys = myDictionary.keys 
keys.foreach { key in 
    adjustNextLayer(inDictionary: myDictionary, for: key) 
} 

Denken Sie daran, dass Sie Funktionen innerhalb von Funktionen in schnellen platzieren können. Dies alles wäre in einer eigenen Funktion.

Natürlich könnte man auch flatMap verwenden, aber das geht höchstens zwei Schichten tief.

Wie zum Ändern der Schlüssel, warum nicht den vorherigen Schlüssel auf Null setzen und dann einen neuen Eintrag im Wörterbuch?

+0

Könnten Sie bitte die vollständige Antwort schreiben? –

+0

Ist das wonach Sie suchen? –

Verwandte Themen