0

「t00010000t00020000t00030000」などの長いNSStringがあります。それを各「t0001000」に分割する必要があります。

私が使用している...

NSArray * tileData = [[GameP objectForKey:@ "map"] componentsSeparatedByString:@ "t"];

そしてそれはそれを分割します、しかし私が必要とする「t」が欠けています(私はそれを再び追加することができると思いますが)。もう1つの方法は、8文字を数えて分割することですが、その方法はわかりません。

しかし、理想的には、[] []型の配列に分割して、次のようなもので各ビットに到達できるようにする必要があります...

NSString tile = [[tileData objectAtIndex:i] objectAtIndex:j]];

私はobj-cを初めて使用するので、助けてくれてありがとう。

4

2 に答える 2

1

H2CO3の答えは、最初の部分にスポットオンです。2番目(多次元配列)については、私があなたが何を望んでいるかを理解していれば、個々の文字のために別の配列は必要ありません。配列内のそれぞれについてNSString、を呼び出すことで各文字にアクセスできますcharacterAtIndex。したがって、上記の例を拡張します。

for (NSString *item in arr) {
    NSLog(@"The fifth character of this string is: %C", [item characterAtIndex:4]);
}

そして、あなたがあなたの例のようにこれらを一緒に連鎖させようとしているなら、あなたもそれをすることができます:

NSLog(@"The fifth character of the fourth string is: %C",
    [[arr objectAtIndex:3] characterAtIndex:4]);
于 2012-10-28T20:05:21.937 に答える
1

それらが厳密にセクションを区切る文字ではない場合t、つまりパーツが常に8文字の長さである場合、それを行うのは非常に簡単です。

NSString *string = @"t00010000t00020000t00030000";
NSMutableArray *arr = [NSMutableArray array];
int i;
for (i = 0; i < string.length; i += 8) {
    [arr addObject:[string substringWithRange:NSMakeRange(i, 8)]];
}

ここarrには8文字の部分文字列が含まれます。

編集:それでは、多次元ソリューションのさらに別のソリューションも提供しましょう。もちろん、@ KevinHの文字を使用したソリューションは非常に洗練されていますが、NSStringが必要で、別のメソッドを実装してもかまわない場合は、次のようなものを追加するのはかなり簡単です。

@implementation NSString (EightCarAdditions)

- (NSString *)charAsStringInSection:(NSInteger)section index:(NSInteger)index
{
    return [self substringWithRange:NSMakeRange(section * 8 + index, 1)];
}

- (unichar)charInSection:(NSInteger)section index:(NSInteger)index
{
    return [self characterAtIndex:section * 8 + index];
}

@end

(aではなくaをcharacterAtIndex返すことに注意してください。1バイト幅を超えるUTF(8、16、32)のものに備えてください。)次に、NSString自体でこれらのメソッドを呼び出すことができるため、非常に便利です。unicharchar

unichar ch = [string charInSection:1 index:3];
于 2012-10-28T19:55:24.077 に答える