Problème de tri alphabétique

Bonjour,


 


J'ai un problème avec un tri alphabétique de certains noms de famille.


 


Soit l'ordre voulu:


Dalembert

da Silva

Dupontel

 

J'ai beau chercher, mon da Silva n'est pas à  la bonne place. En fait il faudrait traiter ce nom comme s'il s'écrivait Dasilva, c'est-à -dire faire "comme si" l'espace n'existait pas. J'ai bien essayé de remplacer l'espace par un espace insécable, ça ne marche pas.

 

L'ennui, c'est que mon application trie alphabétiquement les noms, mais que ce tri doit correspondre à  l'ordre d'une base de données externe sur laquelle je n'ai pas de contrôle. Je vois la logique de leur tri, mais je n'arrive pas à  la reproduire.

 

Une idée ?

 

Merci

 


Mots clés:

Réponses

  • AliGatorAliGator Membre, Modérateur
    Bah soit tu utilises sortedArrayUsingComparator est tu fournis un block qui compare non pas les noms directement, mais les noms sans espace, soit tu écris une méthode d'instance "nameForSorting" dans ton objet qui retourne le nom sans espace et tu tries selon nameForSorting au lieu de name. Ou encore tu surcharges "compare:" pour faire la même chose.
  • yoannyoann Membre

    Est-ce que le plus simple ne serait pas de demander à  la base externe de te donner l'ordre des index après tri ? ça éviterait les bug caché si tu oubli un cas lorsque tu va reproduire l'algo de tri (ce qui est assez probable si leur algo de tri n'est pas un truc standard). ça t'évitera également les soucis lorsqu'ils le changeront.


  • AliGatorAliGator Membre, Modérateur
    Solution avec "sortedArrayUsingComparator" :
    NSArray* sorted = [listePersonnes sortedArrayUsingComparator:^(id obj1, id obj2) {
    NSString* noSpaceName1 = [obj1 stringByReplacingOccurrencesOfString:@ withString:@""];
    NSString* noSpaceName2 = [obj2 stringByReplacingOccurrencesOfString:@ withString:@""];
    return [noSpaceName1 compare:noSpaceName2];
    }];
  • berfisberfis Membre
    mars 2014 modifié #5

    @Ali : merci, je vais essayer comme ça dans un premier temps. Je vais passer par la plus immédiate des solutions: la variable d'instance. Mais c'est du bricolage.


    @yoann : merci, dans un deuxième temps je leur demanderai l'algo de tri... si ça se trouve il n'y en a pas, le type trie "à  la main" et dans ce cas-là  il va m'entendre...  >:(


  • AliGatorAliGator Membre, Modérateur

    Je vais passer par la plus immédiate des solutions: la variable d'instance. Mais c'est du bricolage.

    ?? ???
  • berfisberfis Membre
    mars 2014 modifié #7

    Du bricolage tant que je n'ai pas l'algorithme...


    L'avantage, c'est que


    a- c'est localisé dans le code


    b- ça permet de substituer rapidement la clé de tri en gardant les sortDescriptors existants...


Connectez-vous ou Inscrivez-vous pour répondre.