Je travaille actuellement sur une application qui affiche un tas de fichiers dans une table, et vous pouvez les ajouter et les supprimer et quoi que ce soit. Pour éviter les doublons dans la table, je voudrais créer un NSDictionary en utilisant le chemin complet des fichiers comme clés pour un autre NSDictionary qui contient toutes les informations du fichier, mais je suis un peu préoccupé par la longueur maximale de la clé NSDictionary, et aussi si solution serait tueur de performance ou pas ...Quelle est la longueur maximale de la clé dans NSDictionary?
Répondre
Il n'y a pas de limites spécifiques sur la taille de NSString que vous utilisez tant qu'il n'est pas si grand que vous remplissez toute la mémoire! Le dictionnaire ne charge pas les caractères et commence à les regarder lui-même afin qu'il n'y ait aucun problème interne de NSDictionary lié à cela, ou des problèmes de performance, car tout ce qu'il fait est d'utiliser la méthode isEqual: et s'il retourne vrai, il allumettes.
Espérons que ça aide.
Il n'y a pas de maximum théorique. De plus, je ne m'inquiéterais pas des performances avant d'avoir déterminé que c'est vraiment un problème.
Il n'y a pas de maximum, sauf peut-être la longueur maximale de NSString, qui est théoriquement illimitée/UIntMax. L'interface NSDictionary nécessite l'indexation via les méthodes -hash et -isEqual: implémentées par n'importe quel objet utilisé comme clé, pour permettre aux clés d'être quelque chose, pas seulement NSStrings. Bien sûr, NSString implémente les deux fonctions, mais ce n'est pas le cas - le hachage est un int, donc il revient à NSString de trouver un moyen de transformer son contenu en entier - il n'a pas à le faire physiquement) être unique, juste répétable (renvoyant le même résultat à chaque fois). Voir here pour plus de détails sur le hachage. Fondamentalement, cela signifie que chaque NSString - n'importe quel objet, vraiment - peut avoir un hachage. Par conséquent, si vous pouvez le stocker dans un NSString, il n'y a pas de limite pour le mettre dans un NSDictionary. Aussi, ne vous inquiétez pas de la performance/dictionnaires de dictionnaires sont une conception parfaitement valide et sont assez rapides pour être applicables.
Les clés ne peuvent être rien, elles doivent être conformes au protocole 'NSCopying', et la valeur de hachage ne doit pas reposer sur des caractéristiques mutables de l'objet. – dreamlax
Il n'y a pas de limite spécifique. Une condition préalable pour les dictionnaires est que la clé doit être conforme au protocole NSCopying
. Lorsque vous insérez une paire clé-valeur dans un dictionnaire, le dictionnaire crée une copie de l'objet clé pour s'assurer qu'il ne mute pas à l'intérieur du dictionnaire. Il utilise la valeur de hachage de l'objet clé pour déterminer où le commander en interne. Si l'objet a muté pendant qu'il était dans le dictionnaire, il aurait jeté la commande et le dictionnaire ne fonctionnerait pas, c'est pourquoi le dictionnaire fait une copie (bien que comme optimisation, quand des objets immuables tels que NSString
sont demandés pour une copie , il pourrait simplement augmenter le nombre de retenue et retourner lui-même, mais ceci est un détail d'implémentation).
Comme les clés doivent être conformes au protocole NSCopying
, cela signifie que vous pouvez utiliser un certain nombre d'objets comme les clés à un dictionnaire, y compris NSArray
, NSData
, etc. Ne vous inquiétez pas sur les performances de l'utilisation de grandes chaînes dans NSDictionary
collections à moins que vous avez découvert que c'est en fait un goulot d'étranglement.
- 1. "La clé spécifiée était trop longue, la longueur maximale de la clé est de 1000 octets"
- 2. Quelle est la longueur maximale d'une classe COM enregistrée?
- 3. Quelle est la longueur maximale d'un SID au format SDDL
- 4. Quelle est la longueur maximale d'un objet ListProperty?
- 5. Longueur maximale de la ligne de commande
- 6. Quelle est la longueur maximale de la commande en ligne de commande d'un Windows (cmd.exe)?
- 7. définir la longueur maximale dans un gridview
- 8. Quelle est la longueur maximale d'une zone de texte dans SSRS
- 9. Utiliser la classe comme clé dans NSDictionary
- 10. Quelle est la longueur maximale autorisée pour la propriété window.returnValue? (JavaScript)
- 11. Longueur maximale de l'octet []?
- 12. trait d'union dans la clé NSDictionary
- 13. Quelle est la longueur d'URL maximale que vous pouvez passer à la fonction Wininet, HttpOpenRequest?
- 14. Longueur maximale d'une clé étrangère dans DB2? (SQL0107N)
- 15. Quelle est la longueur maximale d'un tableau dans .NET sur Windows 64 bits
- 16. Quelle est la longueur maximale d'un varchar (doctrine: string) dans Doctrine 2 ou SQL?
- 17. quelle est la longueur maximale de PHP variable/fonction/nom de classe?
- 18. Durée d'expiration maximale de la clé Memcache
- 19. Quelle est la longueur maximale de NSString? Alternative à NSString - iPhone
- 20. dojo.keys.HELP - Quelle est la clé?
- 21. CString longueur maximale
- 22. Quelle est la longueur maximale d'une étiquette de lecteur Windows XP?
- 23. Quelle est la valeur maximale de tinyint (2) dans MySQL?
- 24. Quelle est la taille maximale de la table SQL
- 25. Forcer la longueur maximale pour la chaîne dans PostgreSQL
- 26. Valeur maximale en fonction de la taille de la longueur et de la longueur en .NET
- 27. Nom d'utilisateur Windows longueur maximale
- 28. Quelle est la longueur maximale du champ sql va trier? Pour varchar ou nvarchar
- 29. Longueur maximale de la chaîne d'expression dans regexp (MATLAB)
- 30. Quelle est la valeur entière maximale dans Flex?
Eh bien, 'hash', aussi, plus le protocole NSCopying. Mais tout cela dépend des objets clés à implémenter, et les objets clés n'ont même pas besoin d'avoir une notion de longueur: vous pouvez utiliser des objets copiables, lavables et comparables comme clés. Les NSStrings ont une longueur, et ont cette limite de longueur pratique, mais ils n'ont pas de limite explicitement définie; leurs longueurs sont illimitées en principe. –