0

NSDictionary の配列を、NSDictionaryvalueForKey:の最初の文字の 1 つに基づいてアルファベット順の配列に並べ替えようとしています

事実上、私はこのように少し見えるものが欲しい

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

したがって、文字の配列があり、各文字配列内に、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 NSDictionaries の NSArray を作成する方法を誰かが理解するのを手伝ってくれたら、それは素晴らしいことです! うまくいけば、私が正しくやろうとしていることを説明しました。さらに詳細が必要な場合は、私に知らせてください。提供します.

4

2 に答える 2

2

このコードは、最初に key に割り当てられたオブジェクトを使用して辞書の配列を並べ替えます@"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;
        }
    );
}
于 2013-09-02T22:30:01.953 に答える
1

辞書の配列の辞書を作成することから始めることができます。

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];
}
于 2013-09-02T22:30:04.750 に答える