[Rà‰SOLU]Recherche dans un NSMutableArray

epetit91epetit91 Membre
mars 2012 modifié dans API AppKit #1
Bonsoir,



J'ai créé un NSMutableArray dans lequel j'ai stocké des nombres aléatoires de type "unsigned int" de la façon suivante :


<br />
[tableAleatoire addObject:[NSNumber numberWithInt:numero]];<br />




Lorsque j'associe ce tableau à  une NSTableView, je retrouve bien la liste des numéros aléatoires.



Mon problème se pose lorsque je souhaite rechercher si un numéro est présent dans le tableau.

Quelle méthode dois-je mettre en oeuvre pour rechercher le rang d'un numéro dans le tableau ?

J'ai essayé la chose suivante mais lors de l'exécution, le rang retourné est toujours NSNotFound alors que la valeur recherchée est bien dans le tableau :


<br />
int row = [tableAleatoire indexOfObject:[NSNumber [color=#000000]numberWithInt[/color][color=#666600]:[/color]numeroRecherche]];<br />




Quelqu'un a-t-il une réponse ?

Merci d'avance.

Réponses

  • 'epetit91' a écrit:


    Bonsoir,



    J'ai créé un NSMutableArray dans lequel j'ai stocké des nombres aléatoires de type "unsigned int" de la façon suivante :


    <br />
    [tableAleatoire addObject:[NSNumber numberWithInt:numero]];<br />
    




    Lorsque j'associe ce tableau à  une NSTableView, je retrouve bien la liste des numéros aléatoires.



    Mon problème se pose lorsque je souhaite rechercher si un numéro est présent dans le tableau.

    Quelle méthode dois-je mettre en oeuvre pour rechercher le rang d'un numéro dans le tableau ?

    J'ai essayé la chose suivante mais lors de l'exécution, le rang retourné est toujours NSNotFound alors que la valeur recherchée est bien dans le tableau :


    <br />
    int row = [tableAleatoire indexOfObject:[NSNumber numeroRecherche]];<br />
    




    Quelqu'un a-t-il une réponse ?

    Merci d'avance.




    La méthode indexOfObject sert pour trouver un pointeur



    Il faut faire une boucle pour trouver le bon index


    <br />
    <br />
    int index = 0;<br />
    <br />
    for (NSNumber *nb in tableAleatoire)<br />
    {<br />
       if ([nb intValue] == numeroRecherche) return index;<br />
    <br />
       index++;<br />
    }<br />
    <br />
    return NSNotFound;<br />
    <br />
    




    Fait également attention que tu peut avoir des doublons avec des chiffres aléatoires !
  • Merci pour cette réponse.

    Je pensais que la classe NSArray ou NSMutableArray proposait une méthode de recherche. En fait il faut se la programmer soi-même.

    Merci beaucoup.
  • AliGatorAliGator Membre, Modérateur
    Heu non pas du tout pas besoin de faire la boucle à  la main, indexOfObject est fait pour ça et il n'y a pas de raison qu'il ne marche pas, si tu cherches un NSNumber de type int (si tu cherchais un float dans ton tableau, à  cause d'erreurs d'arrondis ça pourrait expliquer qu'il trouve que 1.345000001 et 1.345 n'étant pas identiques, il ne retrouve pas son index, mais dans ta question c'est des entiers donc y'a pas de soucis)


    NSArray* t = [NSArray arrayWithObjects:<br />
                      [NSNumber numberWithInt:5],<br />
                      [NSNumber numberWithInt:8],<br />
                      [NSNumber numberWithInt:13],<br />
                      [NSNumber numberWithInt:2],<br />
                      nil];<br />
        NSInteger idx = [t indexOfObject:[NSNumber numberWithInt:13]];<br />
        NSLog(@&quot;array = %@, idx of 13 = %d&quot;,t,idx);
    

    array = (

    5,

    8,

    13,

    2

    ), idx of 13 = 2
  • Merci Aligator !



    bon a savoir.
  • Merci beaucoup à  vous 2.

    J'ai compris pourquoi cela ne fonctionnait pas : tout simplement par ce que je ne passais pas la bonne variable dans la méthode de recherche !!!!!

    Je ne risquais donc pas de trouver le nombre que je recherchais !!!!
  • CéroceCéroce Membre, Modérateur
    À noter que le code d'Ali fonctionne parce qu'indexOfObject: utilise la méthode isEqual: de NSObject pour les comparaisons, et ne compare pas simplement les adresses.
  • AliGatorAliGator Membre, Modérateur
    'Céroce' a écrit:


    À noter que le code d'Ali fonctionne parce qu'indexOfObject: utilise la méthode isEqual: de NSObject pour les comparaisons, et ne compare pas simplement les adresses.
    Tout à  fait, contrairement à  la méthode indexOfObjectIdenticalTo qui compare les adresses justement (et dont du coup l'utilité est bien plus limitée)
Connectez-vous ou Inscrivez-vous pour répondre.