长时间窗口显影剂,第一时间目标C / iPhone开发者想要创建可以显示在与字母部分纯的UITableView NSArrays的NSDictionary中。

本字典阵列的源是包含商店名称的数组,按字母顺序排序:

苹果商店点击 亚特兰大面包公司介绍 边框结果 熊熊工作室点击 嘉吉画廊结果 迪拉兹结果 迪克体育用品结果 埃迪Baure结果 提箱结果 GameStop的结果 Heizberg钻石结果 LensCrafters亮结果 麦当劳的结果 诺德斯特龙点击 玮伦鞋业结果 Pottery Barn的结果 冬至结果 星巴克咖啡结果 维多利亚的秘密点击 白色谷仓烛业

这是一个从源创建应看起来像这样(在括号中的数据类型)阵列的词典:

根(词典),点击 .... A(阵列),点击 ........苹果商店(串)点击 ........亚特兰大面包公司(字符串)点击 .... B(阵列),点击 ........国界(字符串)点击 ........熊熊工作室(字符串)点击 .... C(阵列),点击 ........嘉吉画廊(字符串)点击 .... d(阵列),点击 ........迪拉兹(字符串)点击 ........迪克体育用品(字符串)点击 ....等等。

阵列的像上述结构的字典填充的TableView并显示这样的:

一个结果 苹果商店点击 亚特兰大面包公司介绍 乙结果 边框结果 熊熊工作室点击 ç结果 嘉吉画廊结果 d点击 迪拉兹结果 迪克体育用品结果 等

这产生阵列的字典最终把最后存储(白色谷仓蜡烛Co.)的每节标题之后。我已经写的代码

一个结果 白色谷仓烛业点击 乙结果 白色谷仓烛业点击 ç结果 白色谷仓烛业点击 d点击 白色谷仓烛业点击 等

我知道这种情况正在发生,因为我重用一个临时数组,与A的填充它,清除出来,与B的填充它,清除它,等等下面是从源创建阵列的字典中的实际代码阵列。

NSMutableDictionary *places = [[NSMutableDictionary alloc] init];
NSMutableArray *alphaPlace = [[NSMutableArray alloc] init]; 

for (int x = 1; x <= 26; x++) {
    NSString *alphabet = [[NSString alloc] initWithString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZ"];
    NSString *letter = [alphabet substringWithRange:NSMakeRange(x - 1, 1)];

    for (NSString *place in allPlaces) {
        NSString *first = [place substringWithRange:NSMakeRange(0, 1)];
        if ([first isEqualToString:letter] == YES) { // Add to alphaPlace
            [alphaPlace addObject:place];
        }
        else { // Add alphaPlace to places, clear out alphaPlace; add new item to alphaPlace
            [places setValue:alphaPlace forKey:letter];
            [alphaPlace removeAllObjects];  // SAME ARRAY BEING USED FOR ALL LETTERS OF ALPHABET!
            [alphaPlace addObject:place];
        }
    }
}

我知道我可以“暴力”这个创建26个不同的阵列,并使用switch语句来选择正确的一个来填充,但我真的不想这样做。我以为有人更熟悉的Objective-C可以为我提供更好的解决方案。

预先感谢。让我知道如果你需要更多的信息。

有帮助吗?

解决方案

我觉得你想要做这样的事情:

NSMutableDictionary *places = [[NSMutableDictionary alloc] init];

// initialize places with an array for each letter
NSString *alphabet = [[NSString alloc] initWithString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZ"];
for (int x = 0; x < 26; x++) {
    NSString *letter = [alphabet substringWithRange:NSMakeRange(x, 1)];
    [places setObject:[NSMutableArray array] forKey:letter];
}

// then put each place in the array corresponding to its first letter
for (NSString *place in allPlaces) {
    NSString *first = [[place substringWithRange:NSMakeRange(0, 1)] uppercaseString];
    NSMutableArray *letterArray = [places objectForKey:first];
    [letterArray addObject:place];
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top