0

J'ai besoin d'une structure simple pour stocker les noms de polygone en fonction des côtés ... donc par exemple. 1 côté est "monogon", 2 côtés est "digon", 3 côtés est "triangle" et ainsi de suite (disons jusqu'à 12 côtés) Quel est le moyen le plus simple de stocker ces et de les réutiliser dans le code de façon dynamique? par exemple si ma classe polygonShape a 3 comme nombre de côtés, elle devrait renvoyer "Triangle" comme nom (qui est une propriété déclarée dans la classe) (j'utilise Obj-c). Je pensais à 3 options

1. énumérationsComment stocker une plage linéaire de valeurs? Quelle structure de données choisir?

typedef enum {monogon = 1, digon, triangle, ...} 

Mais alors réalisé que ce inverse de ce que j'ai besoin. Ils encoderaient réellement les nombres pour moi à une chaîne. Je dois obtenir les noms des numéros.

2. Les déclarations de commutation cas - se sont aussi proches alternatives

3. Les tableaux - Ensuite, je pensais peut-être des tableaux d'utilisation et leurs index carte pour les chaînes

D'une certaine façon, je sens que je pourrais manquer quelque chose dans le « trop- simple-à-être-vrai "solution de tableaux. Toutes les opinions ont été appréciées.

+0

Le "triangle" ne devrait-il pas être "trigone"? :) – vit

+0

Oui c'est :) ... http://en.wikipedia.org/wiki/Polygon – Dev

Répondre

3

Je pense qu'un tableau serait le chemin à parcourir. Seulement attraper, est qu'un tableau commence à 0 de sorte que vous deviez stocker quelque chose comme une chaîne vide dans l'index zéro, ou soustrayez toujours 1 de votre nombre de côtés pour obtenir l'index approprié. Vous ne pouvez pas stocker nil dans l'index zéro car il est utilisé pour marquer la fin du tableau. L'autre approche pourrait être un NSDictionary, donc vous n'avez pas à faire face à l'index zéro. Vous auriez simplement NSStrings 1 - x comme clés, puis NSStrings de mongon, digon, triangle, ... comme objets dans le tableau. J'espère que cela t'aides.

3

Je suggère d'utiliser une table de hachage (ou une carte de hachage), ou l'équivalent dans votre langue. Ils sont bons pour les paires clé/valeur. :) Votre solution de tableau semble assez bonne, si vous êtes sûr que vous utilisez les ints dans la séquence, à partir de zéro (ce qui dans votre cas se traduirait par un étrange "zerogon" ou un (i-1) pour chaque fois que vous obtenez le nom de la matrice). La suggestion de hachage est plus générale.

Ainsi, l'analyse à la fois:

table de Hash:

  • Plus générale
  • Vous stockez seulement pour les valeurs que vous utiliserez
  • Occupe plus de mémoire

Tableau:

  • pourrait trouver sa place dans votre situation spécifique
  • étrange « zerogon » inclus dans le tableau, ou (i-1) car les tableaux sont zéro basés
  • moins de mémoire occupée (uniquement pour les chaînes, et non pour les ints)
+0

yup ... aussi je cherchais une structure plus simple (rapidité et maintenance) même si je voudrais ajouter des Hashtables aussi être étendu dynamiquement d'une manière beaucoup plus propre que probablement NSMutableArray – Dev

3

Je pense qu'un tableau est une solution élégante dans ce cas, en supposant que vous n'avez pas besoin les préfixes pour les polygones avec plus de 20 côtés:

NSArray *greekPrefixes = [[NSArray alloc] initWithObjects: 
@"an", @"mono", @"di", @"tri", @"tetra", @"penta", @"hexa", @"hepta", @"octa", 
@"ennea", @"deca", @"hendeca", @"dodeca", @"triskaideca", @"tetrakaideca", 
@"pentakaideca", @"hexakaideca", @"heptakaideca", @"octakaideca", 
@"enneakaideca", @"icosa", nil]; 

La chaîne à l'index i est le préfixe grec pour la numéro i.

Et oui, un polygone à zéro côtés est un angon :)

1

Une autre chose à garder à l'esprit dans ces situations est que vous pouvez également stocker les paires clé/valeur dans un fichier plist dans votre paquet d'applications, et chargez-les si nécessaire. Cela peut faciliter la gestion d'un grand nombre d'éléments et la localisation des chaînes dans différentes langues.