2010-03-17 3 views
0

J'ai cet ensembleCocoa - tableau ne triant pas?

NSMutableSet *mySet = [NSMutableSet setWithObjects: @"2", @"8", @"7", @"0", @"3", nil]; 

je copie l'ensemble à un tableau et le tri en utilisant

NSArray *sortedArray = [[mySet allObjects] sortedArrayUsingSelector:@selector(compare:)]; 

Le tableau résultant est exactement le même ordre que l'ensemble et ne pas être triée. Pourquoi?

merci pour toute aide.

EDIT: CORRECTION D'UN TYPO.

+1

copié votre code - il trie ok ... – Vladimir

+0

pas dans mon code. Bizarrement, dans mon code, sortedArray a un objet, au lieu de 5 ... c'est comme si le tableau était stocké sur une seule entrée de sortedArray ... une sorte de tableau dans un tableau ... très étrange ... – SpaceDog

+0

Je l'ai compris. Merci. Ce fut une erreur lors de la récupération de l'ensemble d'origine. Maintenant ça fonctionne bien. Merci pour tout l'aide que vous m'avez donné! – SpaceDog

Répondre

3

Je collé et a couru votre code comme ceci:

NSMutableSet *mySet = [NSMutableSet setWithObjects: @"2", @"8", @"7", @"0", @"3", nil]; 
NSLog(@"mySet=%@",mySet); 
NSArray *sortedArray = [[mySet allObjects] sortedArrayUsingSelector:@selector(compare:)]; 
NSLog(@"sortedArray=%@",sortedArray); 

qui sort:

2010-03-17 11:06:27.982 iPhoneTestBed[41907:207] mySet={(
    0, 
    2, 
    7, 
    8, 
    3 
)} 
2010-03-17 11:06:27.984 iPhoneTestBed[41907:207] sortedArray=(
    0, 
    2, 
    3, 
    7, 
    8 
) 

Je pense que votre problème est avec votre exploitation forestière du tableau trié. Peut-être que vous consignez accidentellement l'ensemble au lieu du tableau. J'ai perdu une demi-journée à le faire.

3

Uhm, trie correctement, une fois que je corrigeais la construction de jeu à

NSMutableSet *mySet = [NSMutableSet setWithObjects: @"2", @"8", @"7", @"0", @"3", nil]; 

Rappelez-vous, "abc" est un char*, qui est un type primitif que vous utilisez rarement en Objective-C, et vous ne pouvez pas mettez-le au NSArray. @"abc" est le NSString, qui est un objet.

+0

Désolé à ce sujet. C'était une faute de frappe dans mon code ici sur SO. Mon code a le @ ... et ne triage pas. – SpaceDog

+0

Vous * ne pouvez pas * trier 'mySet', ou tout autre ensemble. Il dit dans un commentaire sur la réponse de TechZen qu'il a, en fait, enregistré l'ensemble au lieu du tableau trié. –

Questions connexes