众所周知,NSDictionary是无序的。但是,当键是数字时,当打印字典时,它们将按升序打印。我尝试了很多次。
答案 0 :(得分:1)
字典的顺序取决于添加的键对象的哈希方法返回的值。非常喜欢,NSNumber返回它的值,它是用Integer创建的。在这种情况下,你的观察是正确的。
更多信息:http://bynomial.com/blog/?p=73
尝试此代码
NSArray *numbers = @[@0,@1,@2,@3];
for (NSNumber *n in numbers) {
NSLog(@"%ld:%@", (unsigned long)[n hash], n);
}
它产生此输出
0:0
2654435761:1
5308871522:2
7963307283:3
似乎Knuth的哈希算法实现了一半。
原作是
hash(i)=i*2654435761 mod 2^32
这里似乎只是
hash(i)=i*2654435761