在我的项目中,我浏览了一堆sql记录,并使用每个键的字符串填充NSMutableDictionary。键很重要,因为我在TableView中将它们用作节标题。
我遇到的问题是我希望这些部分按照特定的顺序排列。当我调用allKeys时,键的顺序与它们进入NSMutableDictionary的顺序不一样。我或多或少理解为什么。我的问题是如何在其余值之前首先显示某些值(非字母顺序)。
示例字符串:'Blue','Brown','Green','Orange','Purple','Red','Violet','Yellow'......
我希望看到他们这样订购:'红色','绿色','蓝色','棕色','橙色','紫色','红色','紫罗兰'
重要的部分是“'红色','绿色','蓝色'”,所有其他值可以按字母顺序排列在这3个值之后。
我唯一能想到的就是按照字母顺序排序,通过说'sortedArrayUsingSelector:@selector(compare :)'然后只是尝试删除我正在寻找的字符串并将它们放回一个较小的索引值,如果它们存在。有更好的想法吗?我不确定它的效率如何。
答案 0 :(得分:0)
你的方法似乎没问题。使用“库存方法”是一个不错的选择。由于您无法对键的顺序进行假设,因此这是可行的方法。
答案 1 :(得分:0)
这是我提出的方法。同样,我不确定它的效率如何,但它适用于我的目的。
-(NSArray *)rearrangeSections:(NSArray *)s {
NSArray *topSections = [NSArray arrayWithObjects:@"Red", @"Green", @"Blue", nil];
NSArray *reversedTopSections = [[topSections reverseObjectEnumerator] allObjects];
NSArray *alphabetizedArray = [s sortedArrayUsingSelector:@selector(compare:)];
NSMutableArray *sections = [NSMutableArray arrayWithArray:alphabetizedArray];
//Loop through our list of sections and place them at the top of the list.
for (NSString *sectionTitle in reversedTopSections) {
if ([sections containsObject:sectionTitle]) {
[sections removeObject:sectionTitle];
[sections insertObject:sectionTitle atIndex:0];
}
//NSLog(@"%@", sections);
}
NSArray *sortedSections = [NSArray arrayWithArray:sections];
return sortedSections;
}