ios - 使用初始名称创建 NSDictionary 进行排序

标签 ios objective-c nsdictionary

我正在尝试合并来自 this link 的代码进入我自己的应用程序,同时使用我自己的字典。然而,我遇到了几个问题。

我的代码生成了这种字典(因为我正在使用 Web 服务从 MySQL 数据库获取此数据):

{audiences = ({
            name = ABDUL;
            id = 1;
        },{
            name = ELSA;
            id = 2;
        },...etc)}

但是,我想要这样的字典:

audiences = @{@"B" : @[@"Bear", @"Black Swan", @"Buffalo"],
              @"C" : @[@"Camel", @"Cockatoo"],
              @"D" : @[@"Dog", @"Donkey"]};

在我的例子中,它看起来像这样:

audience = @{@"A":@[@"Abdul"],
             @"E":@[@"Elsa"]};

总结一下我的问题: 1) 如何仅使用 name(无 id)创建 NSDictionary? 2) 包含首字母的字典

感谢您的帮助,我是 Xcode 和 Objective-C 的新手,所以如果我问的是菜鸟问题,请原谅我。另外,请忍受我糟糕的英语。提前致谢。

最佳答案

因此,您从网络服务收到的初始数据结构是(在 Cocoa 中重新表达):

NSDictionary* data = @{ @"audiences" : @[
                                          @{ @"name" : @"ABDUL",
                                             @"id" : @1 },
                                          @{ @"name" : @"ELSA",
                                             @"id" : @2 },
                                        ] };

您可以像这样构建您描述的数据结构:

NSMutableDictionary* audience = [NSMutableDictionary dictionary];
for (NSDictionary* person in data[@"audiences"])
{
    NSString* name = person[@"name"];
    if (![name length])
        continue;

    NSRange range = [name rangeOfComposedCharacterSequenceAtIndex:0];
    NSString* key = [[name substringWithRange:range] uppercaseString];
    NSMutableArray* list = audience[key];
    if (!list)
    {
        list = [NSMutableArray array];
        [audience setObject:list forKey:key];
    }
    [list addObject:name];
}

关于ios - 使用初始名称创建 NSDictionary 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25519024/

相关文章:

ios - 在 iOS 上使用具有文件完整性的 NSURLSession 批量下载文件

ios - 为什么 Swift 同时具有 NSDictionary 和 Dictionary 类?

iphone - 在 iPhone 应用程序中嵌入连字字体

iOS Cordova 将本地文件设置为 img src

ios - 我是否需要增量获取 CloudKit 更改和订阅?

ios - 快速创建参数化字符串或宏?

objective-c - 在 C++ 类中保留 ARC 对象

nsdictionary - NSDictionary 中仅包含属性列表对象 (NSNumber),但无法在 UserDefaults 中存储 dict

c# - Xamarin.iOS,将字典转换为 NSDictionary

ios - 无法通过 faSTLane 在 Crashlytics Beta 发行说明中包含表情符号