Objective-C: Compter le nombre de fois qu'un objet se produit dans un tableau?
J'ai besoin d'exécuter ce que je ressens est une fonction de base, mais je ne trouve pas de documentation sur la façon de le faire. S'il vous plaît aider!
J'ai besoin de compter combien de fois un objet se produit dans un tableau. Voir l'exemple:
array = NSArray arrayWithObjects:@"Apple", @"Banana", @"Cantaloupe", @"Apple", @"DragonFruit", @"Eggplant", @"Apple", @"Apple", @"Guava",nil]retain];
Comment puis-je parcourir le tableau et compter le nombre de fois qu'il trouve la chaîne @"Apple"?
Toute aide est très appréciée!
source d'informationauteur EmphaticArmPump
Vous devez vous connecter pour publier un commentaire.
Simple et précis réponse:
PS: Martin Babacaev la réponse est très bonne aussi. L'itération est plus rapide avec des blocs, mais dans ce cas précis, avec si peu d'éléments, je pense qu'il y a apparemment pas de gain. Je voudrais utiliser ce bien 🙂
La solution, à l'aide de blocs de travail (exemple):
Utiliser un
NSCountedSet
il va être plus rapide qu'un dictionnaire et est conçu pour résoudre exactement le problème.@Bbum dit, l'utilisation d'un NSCounted ensemble. Il y a un initialiseur de thet permettra de convertir un tableau directement dans un comptés ensemble:
NSLog de sortie:
(D [1], M [1], E [1], A [1], B [3], X [2], C [1])
Juste les éléments d'accès:
Viens de tomber sur cette jolie vieille question. Je vous recommande d'utiliser un
NSCountedSet
:Je vous encourage à les mettre dans un Dictionnaire (Objective-C est la version de la carte). La clé du dictionnaire est l'objet et la valeur doit être le comte. Il devrait être un MutableDictionary de cours. Si l'élément n'est pas trouvé, l'ajouter et définir le nombre à 1.
I-voté Rob réponse, mais je voulais ajouter un peu de code qui, je l'espère, sera de peu d'aide.
Si le tableau est trié dans l'énoncé du problème, alors vous n'avez pas besoin d'utiliser un dictionnaire.
Vous pouvez trouver le nombre d'éléments uniques de manière plus efficace en faire juste 1 à balayage linéaire et en incrémentant un compteur quand vous voyez 2 consécutifs éléments étant le même.
Le dictionnaire de la solution est en O(nlog(n)), alors que le linéaire de la solution est O(n).
Voici quelques pseudo-code pour le linéaire de la solution:
le code complet avec référence à @bbum et @Zaph
Merci.
Si vous voulez plus générique, ou que vous souhaitez compter égale/objets différents dans la gamme, essayez ceci:
Signe "!" le comte DIFFÉRENTS valeurs. Si vous voulez MÊME valeurs, retirez le "!"
espère que cela aide la communauté!
Je l'ai utilisé pour ajouter bon nombre de sections dans uitableview!
Vous pouvez le faire de cette façon,
Le résultat est la suivante : 1