Pouvez-vous énumérer rapidement un NSIndexSet
? sinon, quelle est la meilleure façon d'énumérer les éléments de l'ensemble?Énumération rapide sur un NSIndexSet
Répondre
Le dénombrement rapide doit produire des objets; comme un NSIndexSet contient des nombres scalaires (NSUInteger
s), pas des objets, non, vous ne pouvez pas énumérer rapidement un ensemble d'index. Hypothétiquement, cela pourrait les enfermer dans NSNumbers, mais ce ne serait pas très rapide.
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];
}
Les index valides peuvent dépasser la plage de valeurs représentable par 'int', puisque les index ne sont pas signés. En outre, lors du ciblage d'une plate-forme 64 bits ou d'un bâtiment avec le paramètre "NS_BUILD_32_LIKE_64" défini, l'index est une valeur de 64 bits. Utilisez 'NSUInteger' au lieu de' int' pour correspondre au type stocké par 'NSIndexSet' sous toutes les plateformes. –
@Jeremy W. Sherman: en réalité les index sont effectivement limités aux valeurs qui peuvent être représentées par un ** NSInteger ** positif car la valeur de retour "not found" est "NSNotFound" qui est la même que "NSIntegerMax" – JeremyP
@Evan: cet exemple est toujours faux. La comparaison dans la boucle while doit être contre 'NSNotFound' * not * -1. – JeremyP
Dans OS X 10.6+ et iOS SDK 4.0+, vous pouvez utiliser le message -enumerateIndexesUsingBlock:
:
NSIndexSet *idxSet = ...
[idxSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
//... do something with idx
// *stop = YES; to stop iteration early
}];
Changer NSInteger à NSUInteger – cocoafan
Ceci est la bonne réponse! – jaredsinclair
Ceci est la réponse réelle, peut demander un changement? – Jameson
Réponse courte: non. NSIndexSet
n'est pas conforme à <NSFastEnumeration>
protocol.
qu'en est-il d'enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * stop) {} --- cette énumération n'est-elle pas rapide? –
Supposons que vous avez une instance NSTableView
(appelons-le *tableView
), vous pouvez supprimer plusieurs lignes sélectionnées à partir de la source de données (Uhm .. *myMutableArrayDataSource
), en utilisant:
[myMutableArrayDataSource removeObjectsAtIndexes:[tableView selectedRowIndexes]];
[tableView selectedRowIndexes]
retourne un NSIndexSet
. Pas besoin de commencer à énumérer sur les index dans le NSIndexSet
vous-même.
Ceci est un point génial sur 'NSMutableArray', merci. –
Ce n'est pas vraiment répondre à la question, mais plutôt dire "peut-être que vous n'avez pas besoin de poser cette question pour commencer." Que voulez-vous cette énumération rapide? " –
- 1. Énumération rapide avec enumeratorAtPath?
- 2. Énumération rapide dans OS 3.0
- 3. Énumération rapide avec un NSMutableArray qui contient un NSDictionary
- 4. énumération rapide pour tableau contenant différents types d'objets
- 5. Hibernate Projections.sum() sur une énumération
- 6. Énumération dans un JSP
- 7. Remplacement d'une énumération qui nécessite une traduction et un énumération
- 8. Énumération des navigateurs installés sur OS X
- 9. Énumération en Ruby sur les rails
- 10. Méthodes d'extension IEnumerable sur une énumération
- 11. Énumération MidpointRounding
- 12. demande rapide sur hbase
- 13. énumération UML comme un type de retour
- 14. Comment obtenir des index de NSIndexset dans un NSArray en cacao?
- 15. Implémentation de CATiledLayer sur un UIWebView pour un défilement rapide
- 16. Énumération de tables LINQ avec énumération de colonnes
- 17. Question rapide sur le stockage sur Android
- 18. Analyse d'une énumération dynamique
- 19. Énumération des gestionnaires d'événements
- 20. Énumération d'itinéraire ASP.NET MVC
- 21. Surcharge Scala Énumération Valeur
- 22. Sqlalchemy énumération/type correspondant?
- 23. Énumération Scala et readResolve
- 24. Énumération Java extensible
- 25. Scala énumération et réflexion
- 26. Comparaison chaîne et énumération
- 27. Énumération dans l'activité
- 28. Nusoap simpletype énumération
- 29. propriétés Énumération Perspectives ContactItem
- 30. Encapsulation d'une énumération privée
Cela ne me dérange pas le coup de performance, mais il faudrait ralentir l'énumération avant d'énumérer rapidement, n'est-ce pas? –
Avec les pointeurs étiquetés (sur les plates-formes 64 bits depuis OS X 10.7 et iOS 5), l'énumération rapide 'NSIndexSet' devrait être assez rapide. –