2010-10-05 13 views
2

Je suis en train de refactoriser un projet qui implique de faire circuler beaucoup de tableaux. Actuellement, chaque méthode qui renvoie un tableau le trie correctement avant de le renvoyer. Ce n'est pas idéal pour plusieurs raisons - il y a beaucoup de code dupliqué, il est inefficace de trier un tableau deux ou trois fois, et il est trop facile d'écrire une nouvelle fonction mais d'oublier de trier le tableau avant de le retourner.Comment conserver un tableau trié

Je suis à la recherche d'un moyen de garantir que le tableau reste toujours dans l'ordre alphabétique. Ma pensée actuelle est de sous-classer NSMutableArray et/ou NSArray pour créer une classe de tableau alphabetisée. Je devrais remplacer toutes les méthodes qui créent ou modifient le tableau pour appeler super et ensuite trier lui-même. Est-ce que cela semble raisonnable, ou y a-t-il une meilleure approche?

EDIT: Étant donné que les problèmes de performances ont été mentionnés, j'inclurai les informations pertinentes de mon projet. La vitesse n'est pas une préoccupation importante. L'ensemble du processus ne prend que quelques secondes, et l'outil n'est utilisé que de temps en temps. La simplicité et la correction évidente sont donc plus importantes.

De même, le cas d'utilisation des tableaux est spécifique. Lorsqu'un tableau est renvoyé, l'appelant accède toujours à tous les éléments du tableau au moins une fois.

Répondre

3

Découvrez CHDataStructures. C'est un framework qui a beaucoup de structures de données auto-triantes, comme des arbres binaires équilibrés et autres joyeusetés.

+0

Je vais vérifier cela, il semble que ce soit ce que je cherchais. –

4

Une arborescence binaire équilibrée est le moyen standard et efficace de trier les éléments. Presque n'importe quel moyen de faire un accès aléatoire avec un tableau simple sera lent. Une liste de choix est également efficace et vous pourrez peut-être ajouter la fonctionnalité à la classe de tableau.

+0

Je n'ai jamais entendu parler d'une liste de diffusion - à Wikipedia pour lire sur eux. Merci! –