1

characterAtIndex: を使用して 2 つの NSString オブジェクトの各文字をループして比較できることはわかっていますが、この関数を頻繁に使用すると、この方法は非常にコストがかかります。

このために組み込まれているもの、またはそれを行うためのより効率的な方法はありますか?

4

2 に答える 2

2

私が考えることができる最も簡単な方法は、そこから 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...
    }
}
于 2012-06-17T01:46:24.373 に答える
0

少しハックですが、それぞれの 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;
    } 
}
于 2012-06-17T01:51:24.877 に答える