2009-10-07 7 views
0

J'ai besoin de garder trace d'un tas d'objets qui peuvent être identifiés par deux clés (Latitude et longitude en fait, mais il y a d'autres propriétés). Je dois faire des choses comme rechercher un objet particulier par ces deux clés, le mettre à jour s'il est là et l'insérer sinon. Je pensais. Je regardais NSDictionary et NSSet mais j'ai pensé que j'entendrais ce que les masses ont à dire.iPhone: choix de la structure de données

Répondre

4

Je suppose que la façon la plus simple est d'utiliser NSDictionary. Vous serez en mesure d'obtenir vos données en faisant simplement [dic objectForKey:key].

En outre, une bonne pratique est de créer des définit pour les clés, de sorte qu'il est plus facile de changer un nom de clé et permet également d'éviter faute de frappe:

#define kObjectLatitude @"Latitude" 
#define kObjectLongitude @"Longitude" 

[object setObject:lat forKey:kObjectLatitude]; 
[object setObject:lon forKey:kObjectLongitude]; 

Ne pas oublier d'écrire les définit dans un endroit intelligent. Si vous l'utilisez uniquement dans une classe, écrivez-les simplement en haut de la déclaration. Toutefois, si vous avez besoin dans différentes parties de votre code, vous pouvez envisager de déplacer le fichier d'en-tête de la classe principale, ou un fichier d'en-tête spécifique définit :)

NS (Mutable) Set ne sera pas utile pour vous dans ce cas. NSSets sont des ensembles mathématiques, et vous ne pouvez pas accéder à une donnée spécifique avec une clé spécifique (aka, vous ne pouvez pas demander un ensemble: "Hey, donnez-moi la longitude, où vous l'avez stocké!")

2

Utilisez NSDictionary . C'est ce que cela signifiait.

3

Ceci n'est pas une réponse directe, mais un mot d'avertissement. La latitude et la longitude sont CLLocationDegrees, qui est une valeur à virgule flottante double précision. Tester l'égalité sur les flottants est une proposition risquée, car le calcul en virgule flottante est inexact. Vous pouvez facilement faire échouer un test d'égalité sur deux flottants qui devraient théoriquement être égaux. Je ne connais pas les exigences de votre application, mais vous pouvez tester la proximité plutôt que l'égalité.

+0

Bon commentaire, merci. J'ai vraiment été mordu avant quand il s'agit d'opérations mathématiques avec des flotteurs. Je les ai arrondis à quelques chiffres significatifs et cela semble fonctionner jusqu'à présent. Va regarder pour ça. – Codezy

Questions connexes