将nsdictionary的内容导入nsarray而不更改顺序

时间:2012-03-29 22:57:55

标签: iphone objective-c ios nsarray nsdictionary

我正在使用:

NSArray *values = [myDict allValues];

将字典的所有内容都放入数组中,但它正在改变内容的顺序。

从网址接收内容并按如下方式检索:

NSDictionary *myDict = [[NSDictionary alloc] initWithContentsOfURL:url];    

我希望维护内容的顺序。我该怎么做?

由于

4 个答案:

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