Trier un tableau sans dictionnaire et sans ordre alphanumérique

Salut,



Je cherche le moyen le plus pratique (avec ou sans blocks) de trier un tableau de strings de cette forme:




1-MET-A-001.mp3,

10-MET-A-001.mp3,

11-MET-A-001.mp3,

12-MET-A-001.mp3,

13-MET-A-001.mp3,

14-MET-A-001.mp3,

15-MET-A-001.mp3,

16-MET-A-001.mp3,

17-MET-A-001.mp3,

18-MET-A-001.mp3,

19-MET-A-001.mp3,

2-MET-A-001.mp3,

20-MET-A-001.mp3,






vers :






1-MET-A-001.mp3,

2-MET-A-001.mp3,

3-MET-A-001.mp3,

...

19-MET-A-001.mp3,

20-MET-A-001.mp3,




sans être obligé de faire une tambouille monstrueuse. Y-a-t-il des astuces ?

Ce ne sera donc pas un ordre alphanumérique comme la tableau original.

Réponses

  • AliGatorAliGator Membre, Modérateur
    Bah utiliser la méthode localizedCompare: (au lieu de la méthode "compare:" standard) de NSString ne trie pas déjà  comme ça ?

    Il suffit d'utiliser sortedArrayUsingSelector: en précisant le selector de NSString à  utiliser pour la comparaison et basta !



    Sinon si ce dernier ne marche pas, tu as tout plein d'options de comparaison utilisables, entre autres l'option NSNumericSearch pour faire les comparaisons/tris en considérant les valeurs numériques qui trainent dans les chaà®nes comme des nombres.

    Tout est expliqué... devine où... eh oui, encore une fois, dans le Programming Guide Apple dédié au sujet !
  • muqaddarmuqaddar Administrateur
    NSNumericSearch m'avait échappé.




    <br />
      [color=#6f43a4]NSArray[/color] *sortedArray = [items [color=#3f277d]sortedArrayUsingComparator[/color]: ^([color=#b9369d]id[/color] first, [color=#b9369d]id[/color] second) {<br />
        [color=#b9369d]return[/color] [([color=#6f43a4]NSString[/color] *)first [color=#3f277d]compare[/color]<img src='http://forum.cocoacafe.fr/public/style_emoticons/<#EMO_DIR#>/sad.png' class='bbc_emoticon' alt=':(' />[color=#6f43a4]NSString[/color] *)second [color=#3f277d]options[/color]:[color=#3f277d]NSNumericSearch[/color]];<br />
      }];<br />




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