あなたは以下の手順で欲しいものを達成することができます:
- は空が、可変辞書を作成します。
- 最初の文字を取得します。
- その文字のキーが存在しない場合は作成します。
- キーの値に単語を追加します(NSMutableArrayである必要があります)。
- すべてのキーについて手順2を繰り返します。
ここに、これらの手順のObjective-Cコードがあります。キーの大文字小文字をにしたいと仮定しています。。
// create our dummy dataset
NSArray * wordArray = [NSArray arrayWithObjects:@"Apple",
@"Pickle", @"Monkey", @"Taco",
@"arsenal", @"punch", @"twitch",
@"mushy", nil];
// setup a dictionary
NSMutableDictionary * wordDictionary = [[NSMutableDictionary alloc] init];
for (NSString * word in wordArray) {
// remove uppercaseString if you wish to keys case sensitive.
NSString * letter = [[word substringWithRange:NSMakeRange(0, 1)] uppercaseString];
NSMutableArray * array = [wordDictionary objectForKey:letter];
if (!array) {
// the key doesn't exist, so we will create it.
[wordDictionary setObject:(array = [NSMutableArray array]) forKey:letter];
}
[array addObject:word];
}
NSLog(@"Word dictionary: %@", wordDictionary);
UTF-8入力と英語以外の言語でも、dictには26個以上の配列がある可能性が高いことに注意してください。このコードはまだ動作しますが、英語以外の単語を並べ替える場合は複雑な細部があります。 – bbum
もちろん、私たちは世界の他の地域でも26文字以上あります。 ;)私は本当になぜこれが問題になるかは分かりません。問題は、これらを整理する方法ではなく( 'localizedCompare:' btwで簡単ですが)、最初の文字でグループ化する方法でした。ちょうど26の配列で終わるという要件については何の質問もありません。 – omz
右 - それで私はあなたに快活さを与えたのです。ちょうどÄ、A、およびÅがすべて別のバケットで終わることを指摘していますが、それは重要であるかもしれないし、そうでないかもしれません(もちろん、巨弦声、汽車鴉叭聲、кряскам、भौंपudまたは、κραυια、καριόχηνας、κορνάρ?)。 – bbum