Objective-C で NSString のリスト (NSArray) をコンマで区切られた単一の NSString に結合する最も簡単で最良の方法は何ですか?
NSArray *anArray = [NSArray arrayWithObjects:@"milk", @"butter", @"eggs", @"spam", nil];
この配列から、 NSString が必要です@"milk, butter, eggs, and spam"
。
より一般的には、リストが 3 つ以上の", "
アイテムである場合、最後と最後から 2 番目のアイテムを除くすべてのアイテムの間に必要です (これには が必要", and "
です)。リストが 2 項目の長さの場合、' and '
コンマなしで だけが必要です。リストが 1 項目の長さの場合、配列から単一の文字列が必要です。
私は次のようなシンプルなものが好きです:
NSString *newString = [anArray componentsJoinedByString:@", "];
しかし、これはもちろん「and」接続詞を省略しています。
以下よりも簡単かつ/または高速なObjective-Cの方法はありますか:
- (NSString *)grammaticallyCorrectStringFromArrayOfStrings:(NSArray *)anArray {
if (anArray == nil) return nil;
int arrayCount = [anArray count];
if (arrayCount == 0) return @"";
if (arrayCount == 1) return [anArray objectAtIndex:0];
if (arrayCount == 2) return [anArray componentsJoinedByString:@" and "];
// arrayCount > 2
NSString *newString = @"";
for (NSString *thisString in anArray) {
if (thisString != [anArray objectAtIndex:0] && thisString != [anArray lastObject]) {
newString = [newString stringByAppendingString:@", "];
}
else if (thisString == [anArray lastObject]) {
newString = [newString stringByAppendingString:@", and "];
}
newString = [newString stringByAppendingString:thisString];
}
return newString;
}