2017-02-23

Objective-C で文字列を join する

Objective-C で文字列配列の join をやるのは面倒と思っていた。Ruby の join みたいなことが出来ると楽なのにー、と。例えばこんなコード:

%w(This is an apple).join(' ') #=> "This is an apple"

で、Apple のマニュアルを見たらあったcomponentsJoinedByString というメソッド。

これを使えば、NSMutableString を使ったり

NSArray<NSString *> *strings = @[@"This", @"is", @"a", @"pen."];
NSString *separator = @" ";

NSMutableString *mResult1 = [NSMutableString new];
for (int i=0; i<strings.count; ++i) {
    [mResult1 appendString:strings[i]];
    if (i < strings.count - 1) {
        [mResult1 appendString:separator];
    }
}
NSString *result1 = [mResult1 copy];
NSLog(@"Text: %@", result1);

Text: This is a pen.

stringByAppendingString: を使ったり

NSArray<NSString *> *strings = @[@"This", @"is", @"a", @"pen."];
NSString *separator = @" ";

NSString *result2 = @"";
for (int i=0; i<strings.count; ++i) {
    result2 = [result2 stringByAppendingString:strings[i]];
    if (i < strings.count - 1) {
        result2 = [result2 stringByAppendingString:separator];
    }
}
NSLog(@"Text: %@", result2);

Text: This is a pen.

する必要がなくなって、シンプルに書ける。

NSArray<NSString *> *strings = @[@"This", @"is", @"a", @"pen."];
NSString *separator = @" ";

NSString *result = [strings componentsJoinedByString:separator];
NSLog(@"Text: %@", result);

Text: This is a pen.

便利。Objective-C には、意外とユーティリティ的なメソッドも用意されていると知る今日この頃。

No comments:

Post a Comment