IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apple Discussion :

Tri de NSMutableArray (Descriptor : A vos Marque ! prêt ! Partez !)


Sujet :

Apple

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    mmx
    mmx est déconnecté
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Janvier 2006
    Messages : 86
    Par défaut Tri de NSMutableArray (Descriptor : A vos Marque ! prêt ! Partez !)
    Bonjour,


    J'ai le besoin de trier un NSMutableArray composé d'objets, étant eux aussi des NSMutableArray. En fait, je mets dans un tableau global, tout un tas de petits tableaux à une dimension, de deux valeurs, en gros j'ai :

    [x1, y1]
    [x2, y2]
    [xn, yn]

    J'ai fait ça comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    litleArray = [[NSMutableArray alloc] init];
    				
    				[litleArray addObject:gravityCenterOrdonnee];
    				[litleArray addObject:gravityCenterAbscisse];
    				
    				
    				[gravityCenterTabular addObject:litleArray];
    Ce que je voudrais, c'est trier (ordre croissant) gravityCenterTabular, mon tableau de tableau, suivant les X (la première valeur des sous tableaux), sachant qu'il faut bien sûr que les Y suivent, sinon, mes coordonnées de points n'ont plus aucun sens

    J'ai essayé des choses en utilisant des Descripteur mais je n'ai pas tout compris :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NSSortDescriptor* sortDescriptor = 
    [[[NSSortDescriptor alloc] initWithKey:@"@min"  ascending:YES] autorelease];
    
    [gravityCenterTabular sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
    Le problème vient que je ne sais pas comment lui faire comprendre à partir de quoi il doit faire le tri, et ensuite, encore moins comment lui dire de faire suivre les y comme il faut en fonction des x.... enfin, en gros, rien ne marche :p


    Vous pouvez me sortir de la ?
    Merci d'Avance.

  2. #2
    Membre expérimenté

    Inscrit en
    Février 2003
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 154
    Par défaut
    Pas de quoi casser trois pattes à un canard.

    Voici un exemple:


    //
    // Pour l'exemple on créer 4 points de coordonnées x et y
    //

    NSDictionary *test1 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:10],nil] forKeys:[NSArray arrayWithObjects:@"x",@"y",nil]];

    NSDictionary *test2 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:[NSNumber numberWithInt:3],[NSNumber numberWithInt:3],nil] forKeys:[NSArray arrayWithObjects:@"x",@"y",nil]];

    NSDictionary *test3 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:[NSNumber numberWithInt:2],[NSNumber numberWithInt:1],nil] forKeys:[NSArray arrayWithObjects:@"x",@"y",nil]];

    NSDictionary *test4 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:[NSNumber numberWithInt:3],[NSNumber numberWithInt:2],nil] forKeys:[NSArray arrayWithObjects:@"x",@"y",nil]];

    //
    // On génère le tableau de points en vrac et on trace ce que ça donne
    //

    NSArray *list = [NSArray arrayWithObjects:test1,test2,test3,test4,nil];
    NSLog(@"En desordre:\n%@",[list description]);

    //
    // On trie avec un descripteur en x et on trace ce que ça donne
    //

    NSSortDescriptor* sortDescriptorX = [[[NSSortDescriptor alloc] initWithKey:@"x" ascending:YES] autorelease];

    NSArray *listX = [list sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptorX]];
    NSLog(@"En ordre par x:\n%@",[listX description]);

    //
    // On trie avec le descripteur en x plus un second en y et on trace ce que ça donne
    //

    NSSortDescriptor* sortDescriptorY = [[[NSSortDescriptor alloc] initWithKey:@"y" ascending:YES] autorelease];

    NSArray *listXY = [list sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortDescriptorX,sortDescriptorY,nil]];

    NSLog(@"En ordre par x puis y:\n%@",[listXY description]);
    Ce qui nous donne:
    2008-08-29 00:50:06.453 Cerbere[9574:10b] En desordre:
    (
    {
    x = 1;
    y = 10;
    },
    {
    x = 3;
    y = 3;
    },
    {
    x = 2;
    y = 1;
    },
    {
    x = 3;
    y = 2;
    }
    )
    2008-08-29 00:50:06.455 Cerbere[9574:10b] En ordre par x:
    (
    {
    x = 1;
    y = 10;
    },
    {
    x = 2;
    y = 1;
    },
    {
    x = 3;
    y = 3;
    },
    {
    x = 3;
    y = 2;
    }
    )
    2008-08-29 00:50:06.455 Cerbere[9574:10b] En ordre par x puis y:
    (
    {
    x = 1;
    y = 10;
    },
    {
    x = 2;
    y = 1;
    },
    {
    x = 3;
    y = 2;
    },
    {
    x = 3;
    y = 3;
    }
    )
    Elle est pas belle la vie?

  3. #3
    mmx
    mmx est déconnecté
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Janvier 2006
    Messages : 86
    Par défaut
    Bonjour,

    Elle est pas belle la vie?
    Pas tout-à-fait, en fait, la tu créer des tableaux de deux valeurs, pour lesquelles correspondent une clé du descripteur. Cependant, moi j'ai un tableau de tableau, comment j'associe la première clé à ma première colonne et la deuxième clé à la deuxième colonne ?

    Je ne dois quand même pas créer autant de NSDictionary *test que j'ai de sous-tableaux dans mon tableau...?


    Sinon j'ai aussi un tableau d'une seule dimension avec les mêmes valeurs organisées comme : [x0, y0, x1, y1, ... , ... xn, yn]. un couple de coordonné est donc accessible en i et i+1.


    Vois-tu ce que je veux dire ?

    Merci en tous cas.


    En fait j'ai réussi, je crois bien. Mais j'ai un autre petit problème Dans List, j'ai qu'un seul objet. Je n'arrive plus à accéder aux valeurs à partir du tableau trié...:'(

  4. #4
    Membre expérimenté

    Inscrit en
    Février 2003
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 154
    Par défaut
    Citation Envoyé par mmx Voir le message
    Vois-tu ce que je veux dire ?
    Ok oui cela m'avait échappé. Là je sais pas si c'est envisageable avec NSSortDescriptor pour des NSArray.

    Tu es dans un cas un peu particulier. En règle générale, on identifie les "colonnes" par un identifiant qui sert aussi de clef pour l'affichage. Je pense là en l'occurrence à l'affichage du résultat directement vers une NSTableView. D'où l'utilisation de dictionnaires pour chaque "ligne".

  5. #5
    mmx
    mmx est déconnecté
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Janvier 2006
    Messages : 86
    Par défaut
    Bon, et bien...

    Je vais ressortir le bon vieux tri à bulle, faire une passe sur x, puis une sur y en essayant de tout changer comme il faut à chaque fois à coup de exchangeObjectsAtIndex:

    Même si ça ne m'a pas servi, au moins j'aurais un peu mieux compris les descripteurs. A moins que quelqu'un ait une autre zolie idée

    Merci et à plus.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 968
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 968
    Par défaut
    Citation Envoyé par mmx Voir le message
    Bon, et bien...

    Je vais ressortir le bon vieux tri à bulle, faire une passe sur x, puis une sur y en essayant de tout changer comme il faut à chaque fois à coup de exchangeObjectsAtIndex:

    Même si ça ne m'a pas servi, au moins j'aurais un peu mieux compris les descripteurs. A moins que quelqu'un ait une autre zolie idée

    Merci et à plus.
    http://developer.apple.com/documenta...ction:context:

Discussions similaires

  1. [MySQL] Tri en fonction de la marque
    Par solaris13 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/10/2008, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo