3

NSString を文字の配列に分割する簡単な方法はありますか? 実際には、結果の型が NSString 自体のコレクションであり、それぞれが 1 文字だけである場合に最適です。

はい、ループでこれを実行できることはわかっていますが、C# の LINQ でできるように、既存のメソッドまたは関数でこれを実行するより高速な方法があるかどうか疑問に思っています。

例えば

// I have this...
 NSString * fooString = @"Hello";

// And want this...
NSArray * fooChars; // <-- Contains the NSStrings, @"H", @"e", @"l", @"l" and @"o"
4

4 に答える 4

11

このようなことができます(列挙子を使用したい場合)

NSString *fooString = @"Hello";
NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[fooString length]]; 

[fooString enumerateSubstringsInRange:NSMakeRange(0, fooString.length)
                              options:NSStringEnumerationByComposedCharacterSequences
                           usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
    [characters addObject:substring];
}];

そして、最終的に NSArray でそれが本当に必要な場合

NSArray *fooChars = [NSArray arrayWithArray:characters];
于 2013-03-06T17:39:05.110 に答える
3

絵文字などの一部の文字は、1 つのインデックスよりも長い範囲に及ぶ可能性があることに注意してください。

NSString のカテゴリ メソッドを次に示します。

@implementation (SplitString)

- (NSArray *)splitString
{
    NSUInteger index = 0;
    NSMutableArray *array = [NSMutableArray arrayWithCapacity:self.length];

    while (index < self.length) {
        NSRange range = [self rangeOfComposedCharacterSequenceAtIndex:index];
        NSString *substring = [self substringWithRange:range];
        [array addObject:substring];
        index = range.location + range.length;
    }

    return array;
}

@end
于 2013-03-06T17:32:54.060 に答える
0

それをに変換するとNSData、バイト長[data bytes]を選択したエンコーディングにC文字列が含まれます。[data length]

于 2013-03-06T17:47:48.467 に答える