我知道我可以使用characterAtIndex來遍歷兩個NSString對象的每個字符:並比較它們,但是如果我經常使用這個函數,這種方法會非常昂貴。如何獲得Objective-C(iOS版)中2個字符串之間的第一個不同字符?
有沒有什麼內置的,或更有效的方式來做到這一點?
我知道我可以使用characterAtIndex來遍歷兩個NSString對象的每個字符:並比較它們,但是如果我經常使用這個函數,這種方法會非常昂貴。如何獲得Objective-C(iOS版)中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...
}
}
這是一個豆蔻hackish的,但你可以得到的C-串每個然後用指針索引。相同的基本算法爲你提到的想法,但理論上那樣有效,你可以合理預期的解決方案是(只盯着兩個內存地址,並比較其內容
僞代碼:
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;
}
}
爲什麼會變成這樣昂貴?它是O(n),N是字符串的大小 – Alan
我對StackOverflow的研究讓我想到了這個假設 - 你認爲它會和C0deH4cker下面描述的方法有相同的性能嗎? – Anton
唯一的性能節省我可以想到會是檢查characterAtIndex的邊界。 – Alan