ios - 在第一个字母顺序下排序 'Person.firstName' 的有效方法

标签 ios sorting nsdictionary

我遍历一长串名字,我将每个名字分配给一个“人”对象。 Person 对象有一个 firstName 和一个 lastName。我正在寻找一种有效的方法来对从字母 AZ 开头的所有 firstNames 进行排序。我想出了这个解决方案,但它并不有效,或者肯定有比为字母表中的每个字母创建“24”数组更简单的方法。

 for(int i = 0; i < numberOfPeople; i++) {

    ...

    if ([person.firstName hasPrefix:@"A"] || [person.firstName hasPrefix:@"a"]) {
            [self.letterA_Array addObject:person];//NSMutableArray

        }

    ...
  }

如果它适用于对象,我想要类似于下面示例的东西,但我不确定:

NSDictionary *animals = @{@"B" : @[@"Bear", @"Black Swan", @"Buffalo"],
            @"C" : @[@"Camel", @"Cockatoo"],
            @"D" : @[@"Dog", @"Donkey"],
            @"E" : @[@"Emu"],
            @"G" : @[@"Giraffe", @"Greater Rhea"],
            @"H" : @[@"Hippopotamus", @"Horse"],
            @"K" : @[@"Koala"],
            @"L" : @[@"Lion", @"Llama"],
            @"M" : @[@"Manatus", @"Meerkat"],
            @"P" : @[@"Panda", @"Peacock", @"Pig", @"Platypus", @"Polar Bear"],
            @"R" : @[@"Rhinoceros"],
            @"S" : @[@"Seagull"],
            @"T" : @[@"Tasmania Devil"],
            @"W" : @[@"Whale", @"Whale Shark", @"Wombat"]};

最佳答案

你可以这样做:

NSArray *names = @[@"Bob", @"Book2", @"August", @"Zulu", @"Agnoz"];
NSMutableDictionary *buckets = [[NSMutableDictionary alloc] init];
for (NSString *name in names) {
    NSString *index = [name substringToIndex:1];
    if (!buckets[index]) {
        buckets[index] = [[NSMutableArray alloc] init];
    }
    [buckets[index] addObject:name];
}

关于ios - 在第一个字母顺序下排序 'Person.firstName' 的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23702924/

相关文章:

ios - NSJSONSerialization 返回 "<null>"字符串

ios - UICollectionView 隐藏了我的补充 View ,为什么?

ios - 跟踪类别的 SKNodes

ios - 应用程序和今日扩展的不同 cocoapods

c++ - 根据对值对多维映射进行排序

java - 对可能包含数字的字符串进行排序

ios - 从给定范围和范围值 : Min= 0, Max= 999999 中找到剩余的 KM

c# - 如何在不尊重某些字符的情况下对列表进行排序?

iphone - 如何将 NSDictionary 转换为 NSData 作为 plist(不保存字典)

ios - 'NSInvalidArgumentException',原因 : '+[NSDictionary dictionaryWithObjectsAndKeys:]: