簡體   English   中英

如何創建NSArray的NSArray

[英]How to create an NSArray of NSArray

我正在嘗試將NSDictionaries的數組排序為基於NSDictionary valueForKey:的字母數組的首字母排序的數組valueForKey:首字母

實際上,我想要看起來像這樣的東西

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

因此,我有一個Letters數組,並且在每個letter數組中都希望有一個KeyValue MAF的第一個字母應該匹配的NSDictionary值數組。

到目前為止,我整理了一些字典,就像這樣

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的樣子

HADM = 1;
ISLOT = 0;
ISVERT = 0;
MAF = "Yazot"; // keyvalue I am trying to work with.

然后我被卡住了,我不確定從這里去哪里。 如果有人可以幫助我理解如何創建NSArrays NSSDs NSDictionaries的NSArray,那就太好了! 希望我已經解釋了我要正確執行的操作,如果您需要更多詳細信息,請告訴我,我會提供。

此代碼將首先使用分配給鍵@"MAF"的對象對字典數組進行排序。 然后,它將創建一個新的Dictionary,在字典中為該字符串的每個第一個字母添加一個可變數組,並將對象添加到其中。

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”放入同一數組中,

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];

}

字典結果

{
    i =     (
                {
            MAF = Ipsum;
        },
                {
            MAF = Isit;
        }
    );
    l =     (
                {
            MAF = Laura;
        },
                {
            MAF = Lorem;
        }
    );
    y =     (
                {
            MAF = Yazot;
        }
    );
}

我們可以從創建字典數組的字典開始。

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值的第一個字母檢索字典數組:

NSArray *dicts = dictsForFirstLetter[@"Y"];

要從中獲得按字母順序排列的數組,可以對字典的鍵進行排序並枚舉它們:

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];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM