1

我有一个 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 标签。

4

2 回答 2

1

因此,您可以使用自定义类(正如我在上面的评论中提到的),或者更好地使用 anNSDictionary来存储 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 应该是您的类的声明属性,以便您可以从不同的方法访问它。

于 2013-05-07T22:25:37.513 回答
0

您需要做的是将您的 NSDictionary 对象存储在数组中,然后根据需要访问该数组中的值以进行排序。您实际上并没有为排序存储新字符串。您只需在数组中的索引处检查字典中某个键的值。

是对字典数组进行排序的好来源

于 2013-05-07T20:20:30.897 回答