2010-05-10 42 views
74

我想在客觀C字符串數組中搜索一個特定的字符串。在這方面有人能幫助我嗎?字符串搜索目標C

+0

是你的家庭作業嗎?我認爲這很容易做到。爲什麼只是循環和比較? – vodkhang 2010-05-10 11:30:44

+0

吶,它不是功課,我需要搜索花費不多的資源在iphone的特定字符串最好的算法,這就是爲什麼我提出的問題 – 2010-05-11 07:03:10

+0

可能重複(HTTP [Objective-C的搜索NSArray的絃樂?]://計算器的.com /問題/ 3588344 /目標c-搜索的NSArray換字符串) – nielsbot 2013-12-31 09:54:47

回答

170
BOOL isTheObjectThere = [myArray containsObject: @"my string"]; 

,或者如果你需要知道它在哪裏

NSUInteger indexOfTheObject = [myArray indexOfObject: @"my string"]; 

我強烈建議你閱讀documentation on NSArray。這是最好做到這一點就可以發佈您的問題:-)

+0

可以說我有含有 的NSArray陣列* myArr,該= [[NSArray中的alloc] initWithObjects:@ 「測試1」,@ 「TEST3」,@ 「test3」,nil]; 我想搜索「TES」讓我們說的話,我想要一個外卡塞入工作,我能不明白,所以我提出這個問題,但感謝您的答覆,讚賞 – 2010-05-11 07:06:49

+0

你要麼循環並測試每個值,或者查看NSPredicate,它爲集合對象提供了非常全面的搜索 - 幾乎與SQL where子句一樣強大。 http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/TP40001789 – JeremyP 2010-05-11 08:32:18

42

之前,您可以使用NSPredicate類的字符串數組搜索字符串。 請參閱下面的示例代碼。

NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Maruthi",@"Hyundai", @"Ford", @"Benz", @"BMW",@"Toyota",nil]; 

NSString *stringToSearch = @"i"; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",stringToSearch]; // if you need case sensitive search avoid '[c]' in the predicate 

NSArray *results = [cars filteredArrayUsingPredicate:predicate]; 

這是在字符串數組搜索字符串的最有效的方式

+0

這對小數組很好,但如果你有很大的陣列(更多然後30K記錄)u能有什麼想法 – 2015-05-23 04:41:11

+0

然後保持排序的數組,並使用二進制搜索(bsearch)用於定位和插入新的元素。 NSArray/NSMutableArray爲此提供了方法。 – spstanley 2017-08-06 23:44:36

2
NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Max",@"Hai", @"Fine", @"Bow", @"Bomb",@"Toy",nil]; 

NSString *searchText = @"i"; 
NSArray *results = [cars filteredArrayUsingPredicate:predicate]; 

// if you need case sensitive search avoid '[c]' in the predicate 

NSPredicate *resultPredicate = [NSPredicate 
           predicateWithFormat:@"title contains[c] %@", 
           searchText]; 


searchResults = [cars filteredArrayUsingPredicate:resultPredicate]; 
+0

雖然此代碼段可能回答這個問題,但最好包含一個解釋如何回答問題的答案,以便該答案對網站的未來訪問者有用 – RobV 2014-09-11 09:19:02

+0

這段代碼正常工作以查找數組中的單詞話。 – 2014-11-04 06:18:29