Création d'un tableau

Nota34Nota34 Membre
05:23 modifié dans API AppKit #1
Bonjour, je cherche à  créer un tableau pour stocker des formules.

Tableau[15][6]
En fait, 15 Lignes et 6 par lignes afin de faire la chose suivante
Ligne 1 du tableau contient = @EB-S6';, Data*1.09944-0.3030, Data*....., Data*....., ......
Ligne 2  @EB-X6';, Data*....Data*....., Data*....., ......
....
Pour ensuite faire appel à  ce tableau pour utiliser les différentes formules et connaitre la ligne en faisant une recherche par le premier paramètre de mon tableau par exemple
Si Tableau[1][1] == @EB-S6 alors j'utilise les formules qui sont sur la même ligne

d'avance,

merci,

Réponses

  • Nebuchad34Nebuchad34 Membre
    05:23 modifié #2
    Le mieux c'est surement de stocker une liste d'objets dans un NSMutableArray *myArray.

    Chaque objet serait alors une instance d'une classe perso comprenant un NSString*string1, plusieurs NSData*data1, NSData *data2 etc (correspondants aux données "colonnes")

    Ensuite, pour faire ta recherche dans ton tableau, tu n'as qu'à  tester ton tableau en faisant une boucle for de 0 à  [myArray count] :

    <br />for (i=0;i&lt;[myArray count];i++)<br />&nbsp; &nbsp; if ( [[myArray objectAtIndex:i] string1] == @&quot;EB-S6&quot; )&nbsp; alors...<br />
    
  • Nota34Nota34 Membre
    05:23 modifié #3
    Merci pour la recherche mais sais tu comment créer ce tableau ? Désolé, je suis une truffe mais je débute
  • GreensourceGreensource Membre
    05:23 modifié #4
    Salut! Normalement si tu fait du développement Objective-C il y a des chances que tu soit inscrit à  l'Apple Developpement Center? Il y a toute la doc dont tu auras besoin là  bas pour débuter. Sinon tu as aussi le super bouquin d'Aaron Hillgass: Cocoa par la Pratique.
    Si tu débutes tu vas devoir passer par là , sinon tu vas perdre énormément de temps avec les bases.

    Donc pour les tableaux; en Objective-C tu peux utiliser soit NSArray si tu n'ajoutes pas d'élément par la suite. Ou bien NSMutableArray sinon.
    Pour déclarer un tableau de se type:
    NSMutableArray* monTableau = [[NSMutableArray alloc] init];
    

    Ensuite dans Xcode, avec la doc tu auras toutes les infos nécessaire avec l'API fournit. Mais vraiment, va lire la doc ou des tutos ou des bon bouquin sinon tu va galèrer à  mon avis.

    Bonne chance
  • BaardeBaarde Membre
    05:23 modifié #5
    Pour simplifier ta recherche, j'utiliserais un dictionnaire : la clé est ta chaà®ne de caractères, la valeur est un tableau de formules.
    NSMutableDictionary * dict = [NSMutableDictionary dictionary];<br />[dict setObject:[NSArray arrayWithObjects:formule1, formule2, etc, nil] forKey:@&quot;EB-S6&quot;];<br /><br />// ...<br />// puis<br /><br />NSArray * formules = [dict objectForKey:@&quot;EB-S6&quot;];
    
  • CeetixCeetix Membre
    mars 2009 modifié #6
    J'up le post car ça m'interesserai de savoir comment vous faites pour créer un tableau (NSArray ici)
    vous le remplissez de n cases mais dans chaque case se trouve un autre tableau cette fois-ci en NSMutableArray car je ne connais pas le nombre de chiffre au départ.


    edit: j'ai jamais mis de graphe2.txt en attaché o_O
  • Nota34Nota34 Membre
    05:23 modifié #7
    J'avoue être perdu, je ne comprend pas trop la logique. Je programme sous Flash et franchement les tableaux sont simples. Mais là  je nage ....

    Comment juste créer un tableau à  plusieurs dimensions.

    Je souhaite un tableau à  comme cela
    Tableau{Environ 50 Lignes}{Environ 10 Colonnes}
    Ligne1 = @EB-S6, Data*0.48585+10,Data/5+0.99484, .......

    Certes il y a cet example :
    NSMutableDictionary * dict = [NSMutableDictionary dictionary];
    [dict setObject:[NSArray arrayWithObjects:formule1, formule2, etc, nil] forKey:@EB-S6];

    // ...
    // puis

    NSArray * formules = [dict objectForKey:@EB-S6];

    Mais je ne vois pas trop comment cela ce goupille ....

  • NseaProtectorNseaProtector Membre
    05:23 modifié #8
    Je crois que ce que tu ne comprends pas c'est que tu dois créer un tableau d'objets.
    Tu créer une classe qui hérite de NSObject dans laquelle tu places tes variables:
    <br />@interface SoucoupeVolante : NSObject {<br />    NSString *nomDeMaSoucoupe;<br />    int largeurDeMaSoucoupe;<br />    int hauteurDeMaSoucoupe;<br />    float acceleration;<br />}<br /><br />@end
    

    Ensuite dans la classe ou tu utilises ton tableau tu créer un tableau d'objet SoucoupeVolante.
  • AliGatorAliGator Membre, Modérateur
    05:23 modifié #9
    Oui, l'idée c'est de voir ta ligne entière (ensemble de tes colonnes) comme un objet elle-même, qu'on va appeller FullRow pour l'exemple.

    Du coup une "FullRow" est une ligne complète constituée de colonnes dans lesquelles il y a des valeurs.
    Et ton tableau devient un "tableau de FullRows", une case de ton tableau représentant donc une ligne entière, tu as autant de cases dans ton NSArray principal que de lignes dans ton "tableur".

    Après si tu demandes la FullRow 26, dans cette FullRow tu peux demander la cellule à  la colonne 4, ce qui finira par te permettre d'accéder à  la cellule D26, en somme.

    Bon je sais pas si ça correspond exactement à  ce que tu cherches avec ton truc de formules et tout, mais bon c'est pour te donner une idée, si tu veux créer un tableau à  2 dimensions, cela se traduit en réalité dans les faits par un tableau contenant d'autres tableaux, donc.
  • NseaProtectorNseaProtector Membre
    05:23 modifié #10
    Pour faire encore plus simple, rien ne t'empêche de créer un nouveau projet en utilisant le template coreDataApplication, et sans code tu peux créer un model exploitable. Ou trouver des exemples simples qui te permettons de comprendre la "philosophie objet" et des NSarrays.
    Les exemples d'Aaron Hillegass:
    http://www.bignerdranch.com/solutions/Cocoa-3rd.tgz
    Ps: Le must se serait d'acheter le livre qui va avec les exemples. Dans les premiers chapitres tu trouveras clairement la réponse a ta question avec en prime de quoi bien gérer la mémoire, car il va falloir le libérer ce tableau...
  • Nota34Nota34 Membre
    05:23 modifié #11
    Merci, je comprend bien mieux ...
    Je sais que j'abuse mais je pose tout de même ma question.

    Si j'utilise l'objet ci-dessous. Comment faire pour mettre mes formules.

    Par exemple, je souhaite stocker les formules une fois pour toute et effectuer le calcul à  la demande. Par exemple, quel type utiliser

    Data étant une donnée récupérée avant le calcul mais après la création de ce tableau.

    Formule1 = Data*0.0008484+10;
    Formule2 = Data*0.0008484-6.9848;

    @interface SoucoupeVolante : NSObject {
        NSString *nomDeMaSoucoupe;
        int formule1;
    .....
    }

  • GreensourceGreensource Membre
    avril 2009 modifié #12
    Je ferais une méthode comme ceci:
    <br />-(float)computeFormulaWithData:(float)theData<br />{<br />   &nbsp; return theData*0.008484+10;<br />}
    

    J'ai mit des float car ça me semblais plus logique. Je ne suis pas sur d'avoir compris ce que tu voulais en même temps :)
    Mais bon pour moi tes formules doivent être stocké dans les opérations de ton objet et pas en tant qu'attributs.

    [edit] Ah ouais en fait après avoir relu tes post c'est un peu débile ce que j'ai écris ^^
    En fait je crois que je décomposerais ta formule en deux partie, le 0.008484 d'un coté et le +10 d'un autre. Mais je suis pas sur que ça soit une bonne idée, ça me semble bien complexe pour ce que tu veux faire ;-)
  • MalaMala Membre, Modérateur
    05:23 modifié #13
    dans 1238183959:

    En fait, 15 Lignes et 6 par lignes afin de faire la chose suivante
    En quoi est-il utile d'utiliser un tableau pour appliquer des formules? En plus, je suppose que la variable Data (pas super comme nomde variable)  est amenée à  changer? A mon sens c'est utiliser une mitraillette pour tuer des mouches et bonjour la cata niveau perfs.

    Au pire, une simple énumération avec un switch suffit histoire de faire un code propre.
    Cela donnerait quelque chose du genre:
    Fichier d'interface:
    #import &lt;Cocoa/Cocoa.h&gt;<br /><br /><br />enum ref_equation<br />{<br />&nbsp; &nbsp;EBS6 = 0,<br />&nbsp; &nbsp;EBX6 = 1<br />};<br /><br /><br />@interface SoucoupeVolante : NSObject <br />{<br />}<br />@end
    

    Fichier d'implémentation
    #import &quot;SoucoupeVolante.h&quot;<br /><br /><br /><br /><br />@implementation SoucoupeVolante<br /><br /><br />- (id)init<br />{<br />&nbsp; &nbsp;self = [super init];<br />&nbsp; &nbsp;if (self != nil) <br />&nbsp; &nbsp;{<br />&nbsp; &nbsp;}<br />&nbsp; &nbsp;<br />&nbsp; &nbsp;return self;<br />}<br /><br /><br />- (float)calculerEquation:(int)equation pourValeur:(float)valeur<br />{<br />&nbsp; &nbsp;float resultat = 0;<br />&nbsp; &nbsp;<br />&nbsp; &nbsp;switch (equation) <br />&nbsp; &nbsp;{<br />&nbsp; &nbsp; &nbsp; case EBS6:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// On applique simplement la formule:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;resultat = valeur*1.09944-0.3030; //etc<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; case EBX6:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; // Etc...<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; default:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;<br />&nbsp; &nbsp;}<br />&nbsp; &nbsp;<br />&nbsp; &nbsp;return resultat;<br />}<br /><br /><br />@end
    


    Edit: grillé par Greensource ;)
  • MalaMala Membre, Modérateur
    05:23 modifié #14
    dans 1238875490:

    [edit] Ah ouais en fait après avoir relu tes post c'est un peu débile ce que j'ai écris ^^
    En fait je crois que je décomposerais ta formule en deux partie, le 0.008484 d'un coté et le +10 d'un autre. Mais je suis pas sur que ça soit une bonne idée, ça me semble bien complexe pour ce que tu veux faire ;-)
    En quoi est-ce débile?
  • Nota34Nota34 Membre
    avril 2009 modifié #15
    Merci,

    Disons que lorsque j'avais développé cette appli sous Flash, j'avais utilisé un tableau car ce soft permet de calculer des distances de projections, largeurs d'écrans .... J'ai environ 40 produits à  gérer et 6 formules par produit. Donc, le tableau me permettait d'ajouter des "lignes" sans pour autant toucher au code. Mais tu as sans doute raison. C'est clair que c'est plus simple en utilisant ta méthode.
    En plus, cela me permet de créer une liste juste sur le produit. Ainsi que récupérer l'index ce qui facilite énormement la gestion du calcul.

    Exemple
    Tab1/1 : @EB-S6';, Formule Calcule Distance MAx, Formule Calcul Distance Mini, Formule Calcul Largeur Min, formule Calcul Largeur Min ....
    Ensuite j'ai des constantes

    CalDistMax = 2
    CalDistMin = 3
    ...

    Donc, si je clique sur un produit au niveau de ma liste par exemple le 1er. Index = 1
    Et ensuite j'utilise mes formules via mes constantes ce qui mer permet de les évaluer simplement.

    Tableau[X][Y];

    Tableau[1]=@EB-S6,Distance Min en 4/3, Distance Max en 4/3, Distance Min en 16/9, Distance Max en 16/9, Distance Min en 16/10, Distance Max en 16/10, ............
    Tableau[2]="EB-X6,Distance Min en 4/3, Distance Max en 4/3, Distance Min en 16/9, Distance Max en 16/9, Distance Min en 16/10, Distance Max en 16/10, ............
    Tableau[3]="EB-W6,Distance Min en 4/3, Distance Max en 4/3, Distance Min en 16/9, Distance Max en 16/9, Distance Min en 16/10, Distance Max en 16/10, ............
    Tableau[4]="EB-1720,Distance Min en 4/3, Distance Max en 4/3, Distance Min en 16/9, Distance Max en 16/9, Distance Min en 16/10, Distance Max en 16/10, ............
    Tableau[5]="EB-1725,Distance Min en 4/3, Distance Max en 4/3, Distance Min en 16/9, Distance Max en 16/9, Distance Min en 16/10, Distance Max en 16/10, ............
    .....

    Ensuite, si je slectionne le produit 1 de ma liste, j'utilise le tableau pour mes calcus.
    Produit = Index

    Ensuite J'ai déjà  initialisé ma valeur Data

    Donc, par exemple si j'appel
    Tableau [Produit][DistMax4/3] = Le résultat de mon calcul Distance MAx en 4/3 qui contient en réalité Data*10-0.007464474
  • MalaMala Membre, Modérateur
    05:23 modifié #16
    Effectivement, si tu veux plus de flexibilité, le mieux c'est un parser d'expressions mathématiques comme celui-ci...
    http://apptree.net/parser.htm

    A partir de là  tu peux n'avoir qu'un dictionnaire avec tes clés et tes formules sous la forme de NSString. Donc tout cela peut être stocké dans un fichier plist indépendant de ton code.
    C'est la solution qui me semble la plus élégante et correspond mieux à  ton besoin il me semble. Par contre niveau perfs cela n'aura rien à  voir avec la solution précédente évidement.
  • NseaProtectorNseaProtector Membre
    05:23 modifié #17
    On ne peut pas gagner une semaine de vacances chez Mala ?
  • AliGatorAliGator Membre, Modérateur
    05:23 modifié #18
    On s'inscrit où ? <3
  • NseaProtectorNseaProtector Membre
    05:23 modifié #19
    Il faudrait interroger une borne interactive, je pense...
  • AliGatorAliGator Membre, Modérateur
    avril 2009 modifié #20
    Zut, j'ai déjà  pas d'iPhone à  titre personnel, alors un iPhone géant à  la Mala, encore moins ^^ ;D
Connectez-vous ou Inscrivez-vous pour répondre.