2011-02-27 5 views
0

Quelle est la meilleure façon de représenter cette structure de données? J'utilise Objective-C pour le développement de l'iPhone, mais tout va bien en général.Comment représenter des données tabulaires dans Objective-C

   Location1   Location2   Location3 
Location1  0     8     23 
Location2  8     0     16 
Location3  23     16    0 

que je pouvais faire des tableaux imbriqués ...

table = ['Location1' => ['Location 1' => '0', 
         'Location 2' => '8', 
         'Location 3' => '23'], 
     'Location2' => ['Location 1' => '8', 
         'Location 2' => '0', 
         'Location 3' => '16'], 
     'Location3' => ['Location 1' => '23', 
         'Location 2' => '16', 
         'Location 3' => '0']] 

... mais je ne suis pas sûr que ce soit la façon la plus efficace car il y a beaucoup de réplication de données. Peut-être une sorte de méthode orientée objet?

De plus, existe-t-il des structures de données iPhone Objective-C spéciales qui se prêtent à ce type de données?

+0

cela couvre les tableaux bidimensionnels: http: //stackoverflow.com/questions/ 638129/how-to-declare-a-two-dimensional-array-de-chaîne-type-dans-obj ective-c – madmik3

Répondre

1

Vous pouvez utiliser un tableau de tableaux, c'est-à-dire NSArray objets qui contiennent d'autres objets NSArray qui contiennent les données. L'inconvénient de cette approche est qu'il appartient à votre programme d'imposer des limites sur la taille du tableau afin que chaque ligne et colonne ait une taille cohérente. Si vos données sont statiques et plist-able (contient seulement des chaînes, des nombres, des dates, des données, des tableaux ou des dictionnaires), considérez le stocker dans un fichier plist, et le charger en une fois en utilisant [NSArray arrayWithContentsOfFile:].

Si vous souhaitez accéder aux données à l'aide de clés telles que Location1, vous devez utiliser des objets NSDictionary au lieu de NSArray objets; Cependant, vous perdez la possibilité d'accéder aux données séquentiellement ou par index numérique (il faut toujours y accéder par clé). De plus, si vos données sont modifiables (c'est-à-dire que vous voulez pouvoir modifier les données), vous devez utiliser NSMutableArray ou NSMutableDictionary.

+0

Les données sont immuables (cela aurait probablement dû être mentionné), de sorte que les plistes semblent être un bon moyen. Je vais faire quelques recherches sur eux (je n'ai pas développé d'applications iPhone depuis longtemps et n'en ai jamais utilisé un auparavant). Merci! – user116170

+0

Question rapide: Y at-il beaucoup de données ou juste un peu? Si c'est beaucoup, alors les plistes ne sont peut-être pas le meilleur choix car ils sont chargés en une seule fois. Rapide, oui, mais pas pour beaucoup de données. – BillEccles

1

Je recommanderais de créer une classe d'emplacement NSobject, avec les membres location1, location2 et location3. puis vous pouvez utiliser l'objet location pour obtenir les valeurs suivantes:
[locationobj location1];
plus tard vous pouvez faire NSArray ou mutablearray de ces objets trop

1

Vous pouvez créer une classe Mutable2DArray qui a utilisé un NSMutableArray interne, en utilisant une conversion entre les indices 2D et un index 1D ou tag:

index1D = numColumns * row2DIndex + column2DIndex; 

Vous pouvez même utiliser des tableaux C simples en interne, en fonction du type de données tabulaire et d'autres exigences (réutilisation, extensibilité, efficacité, utilisation de la mémoire, etc.)

Questions connexes