2017-05-26 9 views
-2

Dans mon cas particulier, j'ai NSDictionary objet qui peut contenir NSString objets en tant que clés et NSString et NSDictionary objets en tant que valeurs. Les dictionnaires internes peuvent également contenir des objets NSDictionary. Et si j'ai besoin d'itérer tous les objets internes NSString et de leur ajouter une lettre? Note: Je dois changer les valeurs et les clésItérer tous les éléments NSDictionary internes et les modifier?

+1

Veuillez au minimum spécifier si vous travaillez en Obj-C ou Swift. – Hamish

+0

@Hamish Est-ce que 'NSDictionary' se comporte différemment s'il est inclus dans Swift? – Willeke

+1

'NSDictionary' n'est pas modifiable. – Willeke

Répondre

1

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) 
} 

Rappelez-vous que vous pouvez placer des fonctions à l'intérieur des fonctions rapides. Tout cela serait dans une fonction qui lui est propre.

Bien sûr, vous pouvez également utiliser flatMap, mais cela ne va pas au-delà de deux couches.

En ce qui concerne le changement de clé, pourquoi ne pas mettre la clé précédente à zéro, puis créer une nouvelle entrée dans le dictionnaire?

+0

Pourriez-vous s'il vous plaît écrire la réponse complète? –

+0

Est-ce ce que vous cherchez? –