首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建NSArray of NSArray

如何创建NSArray of NSArray
EN

Stack Overflow用户
提问于 2013-09-02 21:57:17
回答 2查看 408关注 0票数 0

我正在尝试将NSDictionaries数组排序为基于NSDictionary valueForKey:第一个字母的按字母排列的数组。

实际上,我想要一些看起来像这样的东西

代码语言:javascript
复制
Array A // contains NSDictionaies with keyvalue MAF strings starting with A
 NSDictionary1
 NSDictionary2
 NSDictionary3
Array B // contains NSDictionaies with keyvalue MAF strings starting with B
 NSDictionary1
 NSDictionary2
 NSDictionary3
Array C // contains NSDictionaies with keyvalue MAF strings starting with C
 NSDictionary1
 NSDictionary2
 NSDictionary3
etc

因此,我有一个字母数组,在每个字母数组中,我希望有一个NSDictionary值数组,keyValue MAFs的第一个字母应该与之匹配。

到目前为止,我已经整理了一系列字典,如下所示

代码语言:javascript
复制
NSSortDescriptor *sortDescriptor;
        sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"MAF"
                                                      ascending:YES];
        NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
        sortedDictionaryArray = [arrayData sortedArrayUsingDescriptors:sortDescriptors]; // use this in cellforrow: and didselectrow:

        NSLog(@"%@", sortedDictionaryArray); // this gives me a sorted array of NSdictionaries based off their MAF keyvalue.

这就是NSDicitonary的样子

代码语言:javascript
复制
HADM = 1;
ISLOT = 0;
ISVERT = 0;
MAF = "Yazot"; // keyvalue I am trying to work with.

然后我被卡住了,我不知道从这里往哪里走。如果有人能帮助我理解如何创建一个NSArray of NSArrays NSDictionaries,那就太棒了!希望我已经解释了我想要做的正确的事情,如果你需要更多的细节,让我知道,我会提供。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-02 22:30:01

这段代码将首先使用分配给键@"MAF"的对象对字典数组进行排序。而不是创建一个新字典,它将为该字符串的第一个字母添加一个可变数组,并将对象添加到其中。

代码语言:javascript
复制
NSArray *array = @[@{@"MAF": @"Yazot"}, @{@"MAF": @"Lorem"},@{@"MAF": @"Ipsum"}, @{@"MAF": @"Laura"},@{@"MAF": @"Isit"}];

NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2) {
    return [obj1[@"MAF"] compare:obj2[@"MAF"]];
}];

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];

for (NSDictionary *dict in sortedArray) {
    NSString *firstLetter = [dict[@"MAF"] substringToIndex:1];

    if(![[dictionary allKeys] containsObject:firstLetter])
        dictionary[firstLetter] = [NSMutableArray array];

    [dictionary[firstLetter] addObject:dict];

}

如果需要不区分大小写的字符串处理,则应将"L“和"l”放在同一个数组中,请执行以下操作

代码语言:javascript
复制
NSArray *array = @[@{@"MAF": @"Yazot"}, @{@"MAF": @"Lorem"},@{@"MAF": @"Ipsum"}, @{@"MAF": @"Laura"},@{@"MAF": @"Isit"}];

NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2) {
    return [obj1[@"MAF"] caseInsensitiveCompare:obj2[@"MAF"]];
}];

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];

for (NSDictionary *dict in sortedArray) {
    NSString *firstLetter = [dict[@"MAF"] substringToIndex:1];
    firstLetter = [firstLetter lowercaseString];
    if(![[dictionary allKeys] containsObject:firstLetter])
        dictionary[firstLetter] = [NSMutableArray array];

    [dictionary[firstLetter] addObject:dict];

}

字典结果

代码语言:javascript
复制
{
    i =     (
                {
            MAF = Ipsum;
        },
                {
            MAF = Isit;
        }
    );
    l =     (
                {
            MAF = Laura;
        },
                {
            MAF = Lorem;
        }
    );
    y =     (
                {
            MAF = Yazot;
        }
    );
}
票数 2
EN

Stack Overflow用户

发布于 2013-09-02 22:30:04

我们可以从创建字典数组开始。

代码语言:javascript
复制
NSMutableDictionary *dictsForFirstLetter = [[NSMutableDictionary alloc] init];

for (NSDictionary *dict in arrayData) {
    NSString *dictMAF = dict[@"MAF"];
    NSString *firstLetter = [[dictMAF substringToIndex:1] uppercaseString];
    NSMutableArray *dicts = dictsForFirstLetter[firstLetter];
    if (!dicts) {
        dicts = [[NSMutableArray alloc] init];
        dictsForFirstLetter[firstLetter] = dicts;
    }
    [dicts addObject:dict];
}

然后,您可以通过字典MAF值的第一个字母检索字典数组:

代码语言:javascript
复制
NSArray *dicts = dictsForFirstLetter[@"Y"];

要从中获得一个按字母顺序排列的数组,您可以对字典的键进行排序并对它们进行枚举:

代码语言:javascript
复制
NSMutableArray *alphabetizedDicts = [[NSMutableArray alloc] init];

NSArray *firstLetters = [dictsForFirstLetter allKeys];
NSArray *sortedFirstLetters = [firstLetters sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

for (NSString *firstLetter in sortedFirstLetters) {
    NSArray *dicts = dictsForFirstLetter[firstLetter];
    [alphabetizedDicts addObject:dicts];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18581292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档