as the title, when I insert element to a dictionary in objective-c (in order like: k1, k2, k3), is there any guarantee that when I enumerate it like:
for ( k in dictionary ){
// output the k - value
}
it would show in the same order?
as the title, when I insert element to a dictionary in objective-c (in order like: k1, k2, k3), is there any guarantee that when I enumerate it like:
for ( k in dictionary ){
// output the k - value
}
it would show in the same order?
No, it is not ordered. You can use an array of keys to remember an order if you need to, but dictionaries are conceptually unordered bags of key-value pairs.
No, NSDictionary
does not maintain the insertion order of its keys.
If you need a dictionary that maintains insertion order, I'd suggest using the CHDataStructures framework, which has a CHOrderedDictionary
class (it's a descendent of NSMutableDictionary
). The documentation for CHOrderedDictionary
says:
A dictionary which enumerates keys in the order in which they are inserted.
The following additional operations are provided to take advantage of the ordering:
-firstKey
-lastKey
-keyAtIndex:
-reverseKeyEnumerator
Key-value entries are inserted just as in a normal dictionary, including replacement of values for existing keys, as detailed in -setObject:forKey:. However, an additional structure is used in parallel to track insertion order, and keys are enumerated in that order. If a key to be added does not currently exist in the dictionary, it is added to the end of the list, otherwise the insertion order of the key does not change.
NSDictionary's keys aren't kept in order, but you can get them and sort them, E. G:
for (key in [[myDict allKeys] sortedArrayUsingSelector:@selector(compare:)])
...