Quand j'ajoute des valeurs dans nsmutmédictionnement code> il définit automatiquement les clés sages. Comment puis-je le désactiver et organiser conformément au premier ensemble de premier et second ensemble.
NSMutableDictionary* filteredDictionary = [NSMutableDictionary dictionary];
[filteredDictionary setObject:@"abc" forKey:@"1"];
[filteredDictionary setObject:@"abc" forKey:@"3"];
[filteredDictionary setObject:@"abc" forKey:@"2"];
[filteredDictionary setObject:@"abc" forKey:@"5"];
[filteredDictionary setObject:@"abc" forKey:@"4"];
NSLog(@"%@",filteredDictionary);
current output:
{
1 = abc;
2 = abc;
3 = abc;
4 = abc;
5 = abc;
}
but i want
{
1 = abc;
3 = abc;
2 = abc;
5 = abc;
4 = abc;
}
4 Réponses :
NSDictionary code> n'est pas censé être trié. Vous pouvez obtenir le tri en obtenant toutes les clés à l'aide de
AllKeys CODE> et triant ce tableau à votre goût. Puis boucle via ce tableau et obtenez les valeurs correspondantes. P>
Mais comment si vous savez s'il vous plaît dites-moi.
Voir les messages de Joachim et Simon.
Cela signifie que vous ne pouvez pas faire confiance l'ordre des éléments lorsque vous Fetch / les imprimer sauf si vous utilisez Vous pouvez également voir dans le manuel de AllKeys ; p>
Valeur de retour Discussion Il n'y a pas moyen de garder les clés / valeurs ordonnées que vous le souhaitez dans un NSDictionary code> n'est pas trier vos clés, l'ordre des clés dans un dictionnaire est non défini em>, car il est une collection non ordonnée. P>
keysSortedByValueUsingSelector: code> ou
keysSortedByValueUsingComparator: code> pour les trier en les chercher . p>
Un nouveau tableau contenant les clés du dictionnaire, ou un tableau vide si la
dictionnaire n'a aucune entrée. p>
L'ordre des éléments dans le tableau est ne sont pas définis. Strong> p>
Blockquote>
NSDictionary code>, donc si vous en avez besoin ordonné dans le même ordre que sont ajoutées, vous avez deux options; < / p>
NSArray code> - en même temps que vous les ajoutez à
NSDictionary code>, et l'utilisation que em> collection pour l'accès commandé. li>
keysSortedByValueUsingComparator. Code> pour le commander lors de la récupération de toutes les clés du tableau li>
ul>
Voici une façon de le faire:
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"key" ascending:YES comparator:^(id obj1, id obj2) { if (obj1 > obj2) { return (NSComparisonResult)NSOrderedDescending; } if (obj1 < obj2) { return (NSComparisonResult)NSOrderedAscending; } return (NSComparisonResult)NSOrderedSame; }]; NSArray *sortedKeys = [[filteredDictionary allKeys] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; NSMutableDictionary *orderedDictionary = [NSMutableDictionary dictionary]; for (NSString *index in sortedKeys) { [orderedDictionary setObject:[filteredDictionary objectForKey:index] forKey:index]; } filteredDictionary = orderedDictionary;
Ce code ne parvient pas à compiler car il n'y a pas de AddObject code> Méthode disponible dans NSMutableddictionner , vous demandant comment cela a fonctionné pour OP.
Wow, je dois avoir été sur la crack quand j'ai écrit ça ... je vais le réparer! Merci de l'avoir taper.
in NSDictionary code> Vous n'obtiendrez pas les données que vous insérez.
Vous pouvez utiliser un tableau si vous souhaitez obtenir des données en fonction des données que vous insérez, P>
Je sais que c'est la véritable problème avec le dictionnaire.Mais, je peux vous aider avec une autre façon de le faire. En outre, il y aura des changements mineurs dans l'accès des valeurs.Leso, je ne comprends pas quelle est la question que vous êtes confrontée à cause de cela, après tout, vous devez y accéder par KeyValue uniquement.
@amitrajput oui c'est le point
Il trie uniquement les clés lors de la sortie de la chaîne de description, elle ne modifie pas la disposition de la mémoire qui est basée sur une table de hachage. Si vous l'énumérez, cela ne sera pas trié car il est censé vous donner un accès rapide.
@Vikasrajput Je ne veux pas trier le dictionnaire, mais ce que je veux, c'est la sortie, d'une manière, de sorte que, la façon dont je ajoute des clés au dictionnaire me donnera le même ordre de sortie.