我如何将NSMutableArray与NSMutableDictionary一起使用

时间:2013-05-07 20:12:11

标签: ios nsmutablearray nsmutabledictionary

我有一个网站的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标签错误。

2 个答案:

答案 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是排序字典数组的好资源