我正在使用:
NSArray *values = [myDict allValues];
将字典的所有内容都放入数组中,但它正在改变内容的顺序。
从网址接收内容并按如下方式检索:
NSDictionary *myDict = [[NSDictionary alloc] initWithContentsOfURL:url];
我希望维护内容的顺序。我该怎么做?
由于
答案 0 :(得分:3)
The order of the keys in an NSDictionary is undefined
如果您有一个排序顺序,您希望它们出现在数组中,您可以对数组进行排序。如果你只是想要它们与文件中的顺序相同,那么通过NSDictionary会使这变得不可能。
有arrayWithContentsOfURL,但我不知道这对你有帮助,因为文件必须是正确的格式。
答案 1 :(得分:1)
字典数据结构实际上没有隐式排序,只有键和值。如果您有一个可以应用于键的顺序,您可以将它们放入一个数组中,然后检索它们的匹配值。
答案 2 :(得分:0)
存储值后,您必须对NSArray进行排序。我不知道你想如何对数组进行排序,但是NSArray
有一个像这样的方法:
[anArray sortedArrayUsingSelector:@selector(mySortFunc:)];
所以你调用它然后你做一个自定义排序功能:
- (NSComparisonResult)mySortFunc:(Object *)otherObject {
//Implement this to how you want to sort it.
// return
}
在此处查看更多详细信息:
How to sort an NSMutableArray with custom objects in it?
或者说:看看我所做的评论,指的是如何制作有序的NSDictionary。
http://cocoawithlove.com/2008/12/ordereddictionary-subclassing-cocoa.html
答案 3 :(得分:0)
不幸的是,NSDictionaries没有订单的概念。无法保证您将按照与放入对象相同的顺序返回对象。
您可以使用-[NSArray sortedArrayUsingSelector:]
另一个选择是使用NSDictionary之外的不同容器来执行guaraeentee命令。 Matt Gallagher有一个类集群的eaxmpale来在这个博客上发表这个:“OrderedDictionary: Subclassing a Cocoa class cluster”