Objective-C: Compter le nombre de fois où 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!
Si c'est une opération courante, utiliser un
NSCountedSet
.OriginalL'auteur EmphaticArmPump | 2011-01-28
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 🙂
Vous avez raison... je voulais juste le rendre plus explicite 😉
Désolé, ça m'a pris une éternité à accepter cette réponse, mais il semble que le meilleur! Merci!
OriginalL'auteur nacho4d
La solution, à l'aide de blocs de travail (exemple):
Merci Rob! Fixe..
OriginalL'auteur Martin Babacaev
Comme @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:
Maintenant que j'y pense, une méthode pour la conversion de NSCountedSet <-> NSDictionary (les clés sont des objets comptés ensemble, les valeurs sont les comtes) serait mieux, parce que le plist serait plus petit. J'ai cherché sur google, et je ne pouvais pas trouver quoi que ce soit. Probablement nous avons besoin pour mettre en œuvre une telle méthode manuelle.
OriginalL'auteur zaph
Utiliser un
NSCountedSet
, il va être plus rapide qu'un dictionnaire et est conçu pour résoudre exactement le problème.OriginalL'auteur bbum
Viens de tomber sur cette jolie vieille question. Je vous recommande d'utiliser un
NSCountedSet
:OriginalL'auteur tilo
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.
NSMutableDictionary
avec la valeur, commeA
, comme la clé, et le comte que la clé a été considérée comme la valeur.OriginalL'auteur Rob
OriginalL'auteur pt2ph8
I-voté Rob réponse, mais je voulais ajouter un peu de code qui, je l'espère, sera de peu d'aide.
OriginalL'auteur csano
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:
OriginalL'auteur Himadri Choudhury
le code complet avec référence à @bbum et @Zaph
Merci.
OriginalL'auteur umakanta
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!
OriginalL'auteur elp
Vous pouvez le faire de cette façon,
Le résultat est la suivante : 1
OriginalL'auteur Banker Mittal