49 votes

Énumération rapide sur un NSIndexSet

Pouvez-vous rapidement énumérer un NSIndexSet ? sinon, quel est le meilleur moyen d'énumérer les éléments de l'ensemble?

148voto

Barry Wark Points 73462

Sous OS X 10.6 et versions ultérieures, vous pouvez utiliser le message -enumerateIndexesUsingBlock: :

 NSIndexSet *idxSet = ...

[idxSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
  //... do something with idx
  // *stop = YES; to stop iteration early
}];
 

22voto

Evan Mulawski Points 28536

Une boucle while devrait faire l'affaire. Il incrémente l'index après avoir utilisé l'index précédent.

 /*int (as commented, unreliable across different platforms)*/
NSUInteger currentIndex = [someIndexSet firstIndex];
while (currentIndex != NSNotFound)
{
    //use the currentIndex

    //increment
    currentIndex = [someIndexSet indexGreaterThanIndex: currentIndex];
}
 

20voto

Peter Hosey Points 66275

L'énumération rapide doit donner des objets; puisqu’un NSIndexSet contient des nombres scalaires ( NSUInteger s), pas d’objets, non, vous ne pouvez pas énumérer rapidement un ensemble d’index.

En théorie, cela pourrait les classer dans NSNumbers, mais cela ne serait pas très rapide.

10voto

Dave DeLong Points 156978

Réponse courte: non. NSIndexSet n'est pas conforme au protocole <NSFastEnumeration> .

2voto

Fnord23 Points 108

En supposant que vous ayez une instance NSTableView (appelons-la *tableView ), vous pouvez supprimer plusieurs lignes sélectionnées de la source de données (uhm .. *myMutableArrayDataSource ) en utilisant:

 [myMutableArrayDataSource removeObjectsAtIndexes:[tableView selectedRowIndexes]];
 

[tableView selectedRowIndexes] renvoie un NSIndexSet . Inutile de commencer à énumérer vous-même les index dans les NSIndexSet .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X