對不起,如果這是一個愚蠢的問題。我正在研究一個簡單的程序,它比較兩個填充字符串的數組。一個是1309個專有名詞的清單,另一個是235,877個英語單詞的清單。程序的重點在於比較列表,並將出現在兩個列表上的任何單詞添加到可變數組中。然後,程序將枚舉可變數組並打印出兩個列表中的單詞。這裏是我的代碼:比較字符串數組
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *nameString = [NSString stringWithContentsOfFile:@"/usr/share/dict/propernames"
encoding:NSUTF8StringEncoding
error:NULL];
NSString *wordString = [NSString stringWithContentsOfFile:@"/usr/share/dict/words"
encoding:NSUTF8StringEncoding
error:NULL];
NSArray *names = [nameString componentsSeparatedByString:@"\n"];
NSArray *words = [wordString componentsSeparatedByString:@"\n"];
NSMutableArray *namesAndWords = [[NSMutableArray alloc]init];
for (NSString *w in words){
for (NSString *n in names){
if ([[n lowercaseString] compare:w] == NSEqualToComparison){
[namesAndWords addObject: w];}}}
for (NSString *item in namesAndWords){
NSLog(@"%@", item);}
NSLog(@"There are %lu items in the array",[namesAndWords count]);
NSLog(@"%lu", [names count]);
NSLog(@"%lu", [words count]);
}
return 0;
}
至於現在,我已經有了這個計劃正是因爲它的工作應(顯示294場比賽)。我真正的問題是,當我第一次嘗試比較字符串我試着這樣說:
for (NSString *w in words){
for (NSString *n in names){
if ([n caseInsensitiveCompare:w] == NSEqualToComparison){
[namesAndWords addObject: w];}}}
像這樣:
for (NSString *w in words){
for (NSString *n in names){
if ([n compare:w options:NSCaseInsensitiveSearch] == NSOrderedSame){
[namesAndWords addObject: w];}}}
這兩種方式都送給我1602場比賽,由於某種原因增加了一些項目從兩個陣列到可變陣列namesAndWords
。因此,例如在控制檯中,我會看到伍迪和木質的打印出來。
我嘗試另一種方法是這樣的:
for (NSString *w in words){
for (NSString *n in names){
if ([n compare:w] == NSOrderedSame){
[namesAndWords addObject: w];}}}
在做這種方式它添加了所有1309個字符串從names
陣列。在運行之前,我實際上認爲我不會得到任何匹配,因爲我沒有指定它是不區分大小寫的。
我想弄清楚爲什麼這些看起來如此相似的方法有不同的結果,他們這樣做。我也試圖找出爲什麼if ([[n lowerCaseString] compare:w] == NSEqualToComparison)
是正確的路要走。任何幫助在這裏非常感謝。
不要使用'NSEqualToComparison',使用'NSOrderedSame'。查看顯示有效返回值的'compare:'方法的文檔。 – rmaddy
你需要每個單詞的原始案例嗎?如果你用所有單詞的小寫版本創建兩個'NSSet'並且簡單地得到這兩個集合的交集,你可以使它更加高效。 – rmaddy
是的,當找到一個匹配時,我希望'names'數組中的字符串是添加到'namesAndWords'可變數組中的字符串。這種方式當內容顯示在控制檯中時,它們就是正確的情況。 – JackLikesPizza