是NSDictionary完全没有订购

时间:2013-09-03 00:30:41

标签: objective-c nsdictionary

众所周知,NSDictionary是无序的。但是,当键是数字时,当打印字典时,它们将按升序打印。我尝试了很多次。

1 个答案:

答案 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