長年の Windows 開発者であり、初めての Objective-C/iPhone 開発者は、アルファベットのセクションを持つプレーンな UITableView に表示できる NSArrays の NSDictionary を作成したいと考えています。
この配列のディクショナリのソースは、アルファベット順に並べ替えられた店舗名を含む配列です。
Apple Store
Atlanta Bread Company
Borders
Build-A-Bear Workshop
Cargill Gallery
Dillards
Dick's Sporting Goods
Eddie Baure
FootLocker
GameStop
Heizberg Diamonds
LensCrafters
McDonald's
Nordstrom
Payless Shoe Source
Pottery Barn
Solstice
Starbucks Coffee
Victoria's Secret
White Barn Candle Co.
ソースから作成された配列のディクショナリは、次のようになります (括弧内のデータ型)。
ルート (辞書)
....A (配列)
........Apple Store (文字列)
........Atlanta Bread Company (文字列)
....B (配列)
... .....Borders (文字列)
.........Build-A-Bear Workshop (文字列)
....C (配列)
.........Cargill Gallery (文字列)
... .D (配列)
........Dillards (文字列)
........Dick's Sporting Goods (文字列)
....など
上記の構造のような配列のディクショナリが TableView に入力され、次のように表示されます。
A
Apple Store
Atlanta Bread Company
B
Borders
Build-A-Bear Workshop
C
Cargill Gallery
D
Dillards
Dick's Sporting Goods
など
私が書いた、配列のディクショナリを作成するコードは、各セクション ヘッダーの後に最後のストア (White Barn Candle Co.) を配置することになります。
A
ホワイトバーンキャンドル社
B
ホワイトバーンキャンドル社
C
ホワイトバーンキャンドル社
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 に詳しい人が、より洗練されたソリューションを提供してくれると思いました。
前もって感謝します。さらに情報が必要な場合はお知らせください。