在目标c中的字符串数组中进行字符串搜索


87

我想在目标c的字符串数组中搜索特定的字符串。在这方面有人可以帮我吗?


这是你的作业吗?我认为这很容易做到。为什么只循环和比较?
vodkhang,2010年

不,这不是功课,我需要最好的算法来搜索特定字符串,而该字符串在iphone中消耗的资源并不多,这就是我提出问题的原因
Filthy Knight,2010年

Answers:


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

或者如果您需要知道它在哪里

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

我强烈建议您阅读NSArray上文档。最好在发布您的问题之前这样做:-)


可以说我有一个包含NSArray的数组* myArr = [[NSArray alloc] initWithObjects:@“ test1”,@“ test3”,@“ test3”,nil]; 我想搜索“ tes”,然后说我想使用通配符,这是我无法理解的,所以我提出了这个问题,但是感谢您的答复,谢谢
肮脏的骑士2010年

您可以遍历并测试每个值,或者查看NSPredicate,它可以对集合对象进行非常全面的搜索-几乎与SQL where子句一样强大。 developer.apple.com/mac/library/documentation/cocoa/Conceptual/...
JeremyP

45

您可以使用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];

这是在字符串数组中搜索字符串的最有效方法


这对小型数组很好用,但是如果您有非常大的数组(超过3万条记录),您能有什么主意

然后,使数组保持排序状态,并使用二进制搜索(bsearch)来查找和插入新元素。NSArray / NSMutableArray具有用于此目的的方法。
spstanley

3
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];

尽管此代码段可以回答问题,但最好包含对其回答方式的说明,以便该回答对站点的未来访问者有用
RobV

这段代码可以很好地在单词数组中找到单词。
Rahul K Rajan 2014年

我想用初始文本来做到这一点。我的意思是搜索文本需要从头开始而不是从任何地方进行匹配。请帮助
Gautam Shrivastav
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.