characterAtIndex: を使用して 2 つの NSString オブジェクトの各文字をループして比較できることはわかっていますが、この関数を頻繁に使用すると、この方法は非常にコストがかかります。
このために組み込まれているもの、またはそれを行うためのより効率的な方法はありますか?
characterAtIndex: を使用して 2 つの NSString オブジェクトの各文字をループして比較できることはわかっていますが、この関数を頻繁に使用すると、この方法は非常にコストがかかります。
このために組み込まれているもの、またはそれを行うためのより効率的な方法はありますか?
私が考えることができる最も簡単な方法は、そこから C 文字列を取得し、文字列を反復処理することです。
簡単な例です(好みに合わせて修正してください):
const char* myCString = [myNSStringInstance UTF8String];
const char* string2 = [nsstring2 UTF8String];
// Assume same length. You can fix this
for(i = 0; i < strlen(myCString); i++) {
if(myCString[i] != string2[i]) {
// Do something here...
}
}
少しハックですが、それぞれの c-string を取得してから、ポインターのインデックス付けを使用できます。あなたが言及したアイデアと同じ基本的なアルゴリズムですが、理論的には、ソリューションが合理的に期待できるのと同じくらい効率的です(2つのメモリアドレスを見て、それらの内容を比較するだけです.
擬似コード:
char *stringA = [stringA cStringUsingEncoding:NSUTF8StringEncoding];
char *stringB = [stringB cStringUsingEncoding:NSUTF8StringEncoding];
int mismatchIndex = -1;
for(int i = 0; i<shorterStringLength; i++) {
if (stringA[i] != stringB[i]) {
mismatchIndex = i;
break;
}
}