2009-12-13 12 views
0

J'ai une application iPhone qui a besoin de trier quelques NSMutableArrays, cette rangée contient environ 3000 éléments. L'idée est de les trier une fois au démarrage de l'application, puis à chaque itération, j'ai besoin d'insérer 9 éléments dans chacune de ces matrices. Existe-t-il un moyen efficace avec NSMutableArrays, d'insérer ces 9 éléments de manière triée? Je ne sais pas si sortUsingSelector: est assez "intelligent" pour tirer parti du tableau trié et seulement 9 éléments sont "non triés".La meilleure façon de trier NSMutableArray?

Merci!

+0

un coup d'oeil à http://stackoverflow.com/questions/1844031/how-to-sort-nsmutablearray-using-sortedarrayusingdescriptors/1845165#1845165 – stefanB

Répondre

2

Meilleure façon de trier NSMutableArray? Utilisez le message sortUsingSelector. Il devrait être assez intelligent.

Pour insérer les éléments dans un de manière triée, vous pouvez effectuer une recherche binaire sur la baie, puis l'insérer dans la position souhaitée. Après avoir répondu à votre question, je vous suggère d'utiliser SQLite pour stocker les éléments que vous voulez pour le tableau. De cette façon, votre problème se réduira à interroger la table avec les éléments avec un ordre par clause, et en insérant les neuf nouveaux éléments avec insérer phrase. Si vous avez un index sur l'ordre que vous recherchez, il devrait être rapide.

+1

-1 Il est pas assez intelligent. La documentation fait allusion à cela dans la description de 'sortedArrayUsingFunction: context: hint:'. –

4

J'ai eu beaucoup de succès en jetant simplement des éléments dans le tableau, puis en les triant avec le NSArray sorting methods.

Cela semble inefficace, mais ces classes Foundation ne sont pas seulement des wrappers légers autour des tableaux C standard. Au lieu de cela, ils ont une énorme quantité de code tout construit pour rendre cette tâche standard facile et rapide. Une bonne méthode empirique consiste à utiliser la méthode la plus rapide et la plus simple fournie par les classes intégrées, puis d'étudier différentes méthodes uniquement lorsque vous avez prouvé que la méthode simple n'est pas assez rapide.

L'optimisation prématurée est la racine de tous les maux.

1

Je cherchais des mesures réelles comparant les différentes sortes et n'en ai trouvé aucune. Donc, je l'ai mesuré moi-même pour un ensemble de données avec lequel je travaille. Voici les résultats pour mes données, YMMV. Les temps en secondes.

2011-12-26 14:09:36.264 sorting 302 objects 
2011-12-26 14:09:36.335 sorted w/descriptors in 0.051 
2011-12-26 14:09:36.361 sorted w/selector in 0.004 
2011-12-26 14:09:36.394 sorted w/function in 0.010 
2011-12-26 14:09:36.427 sorted w/comparator in 0.011