8
votes

Comparez les nsdictionnaires contenant nstrings

J'ai deux nsdictionnaires contenant nstrings . Pour comparer ces deux dictionnaires, j'utilise isequaltoDictionardiction: méthode. La documentation sur isequaltodidiction: dit

"Deux dictionnaires ont un contenu égal si elles contiennent chacune du même nombre d'entrées et, pour une clé donnée, les objets de valeur correspondants dans chaque dictionnaire satisfont à l'ISEAR: test . "

Donc, mes chaînes sont comparées par isequal: méthode.

La question est:
Comment iSequal: fonctionne pour le nstring ?

utilise-t-il isequal: à partir de nsobject ? J'ai lu que iSequal à partir de NsObject compare simplement les adresses, à l'aide de == . Pour prouver ou réfuter cette idée, j'ai écrit un échantillon: xxx

le résultat est est oui , les adresses de STR1 et str2 sont différents cependant.
donc, soit il n'utilise pas iSequal: à partir de nsobject (quoi que?) ou NsObject 'S ISEQ: fait quelque chose de plus compliqué alors de vérifier l'égalité des adresses.

Est-ce que quelqu'un sait comment ça marche vraiment?


2 commentaires

Pourquoi ne pouvez-vous pas utiliser la méthode Isequaltostring? trop facile?


@Sambudda Ce n'est pas moi, c'est Nsdictionary utilise Isequal: comparer ses éléments.


3 Réponses :


10
votes

nstring remplace isequal: Pour comparer correctement les chaînes, vous êtes donc parfaitement amende pour comparer les dictionnaires de cette façon.


3 commentaires

Merci. Y a-t-il un moyen de s'en assurer? Les en-têtes et la documentation pour Nstring ne dit rien.


J'ai trouvé cela, ce fait est mentionné dans "Programmation de l'Objective-C: le Guide de Ranch Big Nerd".


@Anastasia également, il est très indirectement mentionné dans les docs sous isequaltostring: qui dit qu'il est identique à ISEQ: quand les deux sont cordes, mais plus vite.



5
votes

IsequaltoDictionarictionnaire compare tous les objets avec Isequal.

Dans mon cas, cela ne fonctionne pas avec l'objet Nstring dans mon dictionnaire. J'ai donc fait une solution de contournement très simple. Je comparais la description des deux dictionnaires. Cela fonctionne avec des dictionnaires contenant nstring et nsnumber et whit tous les objets contenant une méthode de description. xxx


0 commentaires

1
votes

comparer des descriptions littérales strong> de dictionnaires. Je l'utilise dans des tests d'unité.

NSString *a = dictionary.description;
NSString *b = assertation.description;
BOOL test = [a isEqualToString:b];


1 commentaires

NSDictionary n'est pas commandé, je pense.