我有一个网站的NSMutableDictionary
[dictionaryOfSites setObject:@"http://www.example.com" forKey:@"Example.com"];
[dictionaryOfSites setObject:@"http://www.site1.com" forKey:@"Site1"];
[dictionaryOfSites setObject:@"http://www.apple.com" forKey:@"Apple"];
我知道你不能对字典进行排序。但我读过其他人使用NSMutableArray作为键,数组可以排序。
所以如果我设置一个新数组
[[arrayKey alloc] initWithObjects:@"Example.com", @"Site1", @"Apple", nil];
然后我会将我的第一个代码段修改为
[dictionaryOfSites setObject:@"http://www.example.com" forKey:[arrayForKey objectAtIndex:0]];
[dictionaryOfSites setObject:@"http://www.site1.com" forKey:[arrayForKey objectAtIndex:1]];
[dictionaryOfSites setObject:@"http://www.apple.com" forKey:[arrayForKey objectAtIndex:2]];
在这个简单的问题中,我有3个站点,所以我“硬”编码了它。如果我的网站列表是100,我将如何做同样的事情?如何维护网站的顺序?
如果我对数组进行排序 [arrayKey sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
索引2不会成为索引0吗?如果它变为索引0,那么你可以看到dictionaryOfSites的URL标签错误。
答案 0 :(得分:1)
因此,您可以使用自定义类(我在上面的评论中提到),或者更好地使用NSDictionary
来存储MarkM建议的值。
编辑:“我不需要维护字典。它是一个新的应用程序。”
由于您不需要像发布的那样开始使用一个大词典,因此最好只为阵列中的每个站点存储单独的词典对象,而不必担心转换。
// Setup the initial array
NSMutableArray *arrayOfSites = [NSMutableArray new];
[arrayOfSites addObject:@{@"Name" : @"Example.com",
@"URL" : @"http://www.example.com"}];
[arrayOfSites addObject:@{@"Name" : @"Site1",
@"URL" : @"http://www.site1.com"}];
[arrayOfSites addObject:@{@"Name" : @"Apple",
@"URL" : @"http://www.apple.com"}];
// At this point, arrayOfSites contains a dictionary object for each site.
// Each dictionary contains two keys: Name and URL with the appropriate objects.
// Now we just need to sort the array by the Name key in the dictionaries:
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES];
[arrayOfSites sortUsingDescriptors:[NSArray arrayWithObjects:descriptor, nil]];
NSLog(@"%@", arrayOfSites);
结果:
2013-05-07 18:19:08.386 Testing App[75712:11f03] (
{
Name = Apple;
URL = "http://www.apple.com";
},
{
Name = "Example.com";
URL = "http://www.example.com";
},
{
Name = Site1;
URL = "http://www.site1.com";
} )
要访问数据,您可以使用:
NSString *name = [[arrayOfSites objectAtIndex:indexPath.row] objectForKey:@"Name"];
请注意,arrayOfSites应该是类的声明属性,以便您可以从不同的方法访问它。
答案 1 :(得分:0)
您需要做的是将NSDictionary对象存储在数组中,然后根据需要访问该数组中的值以进行排序。您实际上并不存储用于排序的新字符串。您只需检查数组中索引处的字典中某个键的值。
Here是排序字典数组的好资源