2010-05-10 71 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