首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不重用相同NSDictionary的情况下创建NSArrays的Objective-C NSArray?

如何在不重用相同NSDictionary的情况下创建NSArrays的Objective-C NSArray?
EN

Stack Overflow用户
提问于 2009-09-19 00:54:57
回答 1查看 15.4K关注 0票数 2

长期的视窗开发人员,第一次使用Objective-C/iPhone开发人员想要创建一个NSArrays的NSDictionary,它可以显示在带有字母部分的纯UITableView中。

此数组字典的源是一个包含按字母顺序排序的商店名称的数组:

苹果商店

亚特兰大面包公司

边框

构建熊工作坊

嘉吉画廊

迪拉德

迪克的体育用品

埃迪·鲍尔

FootLocker

GameStop

海兹堡钻石

LensCrafters

麦当劳

诺德斯特龙

无偿鞋源

陶器仓库

冬至

星巴克咖啡

维多利亚的秘密

白谷仓蜡烛公司。

从源代码创建的数组字典应该如下所示(括号中的数据类型):

词根(字典)

....A (数组)

........Apple存储(字符串)

........Atlanta面包公司(字符串)

....B (数组)

........Borders (字符串)

.......Build-A-Bear研讨会(字符串)

....C (数组)

........Cargill库(字符串)

....D (数组)

........Dillards (字符串)

......Dick‘s Sporting Goods (字符串)

....etc。

类似上述结构的数组字典填充TableView,并显示如下:

一个

苹果商店

亚特兰大面包公司

B

边框

构建熊工作坊

C

嘉吉画廊

D

迪拉德

迪克的体育用品

等。

我编写的创建数组字典的代码最终将最后一个存储(White Barn Candle Co.)在每个节标题之后。

一个

白谷仓蜡烛公司。

B

白谷仓蜡烛公司。

C

白谷仓蜡烛公司。

D

白谷仓蜡烛公司。

等。

我意识到这是因为我重用了一个临时数组,用A填充它,清除它,用B填充它,清除它等等。这是从源数组创建数组字典的实际代码。

代码语言:javascript
复制
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的人可以为我提供一个更优雅的解决方案。

提前谢谢。如果你需要更多信息,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-19 01:23:55

我认为你想做这样的事情:

代码语言:javascript
复制
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];
}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1447376

复制
相关文章

相似问题

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