私はそこに誰もが興味を持っていた場合の別のバージョンを投げるだろうと思って...個人的に、私はNSMutableStringを使用してクリーンなアプローチを好むが、パフォーマンスが最優先である場合には、この1の方が高速です:
- (NSString *)reverseString:(NSString *)input {
NSUInteger len = [input length];
unichar *buffer = malloc(len * sizeof(unichar));
if (buffer == nil) return nil; // error!
[input getCharacters:buffer];
// reverse string; only need to loop through first half
for (NSUInteger stPos=0, endPos=len-1; stPos < len/2; stPos++, endPos--) {
unichar temp = buffer[stPos];
buffer[stPos] = buffer[endPos];
buffer[endPos] = temp;
}
return [[NSString alloc] initWithCharactersNoCopy:buffer length:len freeWhenDone:YES];
}
私も迅速に書きました試験ならびに(Iはまた、以下を含む)より伝統的なNSMutableString方法とこれを比較する:
// test reversing a really large string
NSMutableString *string = [NSMutableString new];
for (int i = 0; i < 10000000; i++) {
int digit = i % 10;
[string appendFormat:@"%d", digit];
}
NSTimeInterval startTime = [[NSDate date] timeIntervalSince1970];
NSString *reverse = [self reverseString:string];
NSTimeInterval elapsedTime = [[NSDate date] timeIntervalSince1970] - startTime;
NSLog(@"reversed in %f secs", elapsedTime);
結果は以下の通りであった:
は単なる参考のために、ここで使用されるNSMutableString方法です
- (NSString *)reverseString:(NSString *)input {
NSUInteger len = [input length];
NSMutableString *result = [[NSMutableString alloc] initWithCapacity:len];
for (int i = len - 1; i >= 0; i--) {
[result appendFormat:@"%c", [input characterAtIndex:i]];
}
return result;
}
(注:この比較のために、私は誰も私のためにこの回答に投票することができれば、私は感謝して投票したり回答にコメントするにはまだ十分な評判ポイントを持っていません。私は長い時間のリーダーしてきたが、今はより多くの貢献を開始したい)
エラーは何ですか? –