1

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

4

1 回答 1

1

字典的顺序取决于添加的键对象的哈希方法返回的值。很像,NSNumber 返回它的值,它是用一个整数创建的。在这种情况下,您的观察将是正确的。

更多信息: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
于 2013-09-03T00:35:03.960 回答