我正在使用plist
来存储键值列表。当应用程序需要该列表时,尝试加载列表到 NSDictionary 。一切都很好,直到这里。
这里我是如何加载plist文件的:
NSString *myPlistFilePath = [[NSBundle mainBundle] pathForResource: @"cities" ofType: @"plist"];
cities = [NSDictionary dictionaryWithContentsOfFile: myPlistFilePath];
当我们查看时,cities
是NSDictionary
。然后我将所有列表键值推送到TableView,不知道它在plist文件中没有列出。随机排序。
有办法搞清楚吗? 提前谢谢。
答案 0 :(得分:4)
NSDictionary不是有序集合,也就是说,它不保证以任何方式保留内容的顺序。它唯一的功能是从键映射到值。
如果您需要订购的内容,可以使用例如keysSortedByValueUsingSelector从NSDictionary中提取内容,它将提取集合中的数据,按您的条件对其进行排序并将其存储在(保留订单)NSArray中
或者,考虑在plist的根目录中使用Array,其中包含城市词典的有序列表。然后,如果迭代其中包含的数组,它们将按照plist中包含的数组顺序进行。
答案 1 :(得分:1)
NSDictionary不是有序的数据结构。
对象基于allKeys
函数列出,键以未定义的方式列出。
请参阅Apple文档了解allKeys
函数。
allKeys 返回包含字典键的新数组。
- (NSArray *)allKeys
返回值包含字典键的新数组,或者为空 如果字典没有条目,则为数组。
讨论未定义数组中元素的顺序。
答案 2 :(得分:0)
如果您希望避免使用选择器对键进行排序,请考虑在plist的根目录中使用Array。然后,当您遍历数组时,将保留顺序。这运行o(n),其比最快可能的排序算法短一个因子log(n)
例如:
cities{
list[
city{}
city{}
city{}
...
]
}