我是一个Objective-C初学者,现在我想循环一个数组并检查子串是否在那里。如果为true,则应将数组的对象放入另一个将放在屏幕上的数组中。这是我的代码:
NSArray *origarray = [NSArray arrayWithObjects:
@"One",
@"Two",
@"Three",
@"Four",
@"Five",nil];
for(NSString *words in origarray){
NSMutableArray *newarray = [[NSMutableArray alloc] init];
NSRange range = [words rangeOfString:@"o"];
if(range.location != NSNotFound){
[newarray addObject:words];
}
textview.text = [newarray description];
}
在这种情况下,我们应该得到一个'One','Two'和'Four'的数组,因为它们都包含'o'。不幸的是我在textview中得到一个空数组。 (我知道'description'仅用于调试目的)。 是否有人可以告诉我该如何做到这一点?
答案 0 :(得分:3)
您可以使用NSPredicate
来执行此操作,例如
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains %@", @"o"];
NSArray* newArray = [origarray filteredArrayUsingPredicate:predicate];
或
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@", @"o"];
NSArray* newArray = [origarray filteredArrayUsingPredicate:predicate];
用于不区分大小写的匹配
答案 1 :(得分:1)
获得空数组的原因是因为每次迭代时,都要重新分配数组。试试这个(注意我已经在循环之前放置了数组的分配,所以它已经完成了一次并且还更新了文本视图):
NSArray *origarray = [NSArray arrayWithObjects:
@"One",
@"Two",
@"Three",
@"Four",
@"Five",nil];
NSMutableArray *newarray = [[NSMutableArray alloc] init];
for(NSString *words in origarray){
NSRange range = [words rangeOfString:@"o"];
if(range.location != NSNotFound){
[newarray addObject:words];
}
}
textview.text = [newarray description];
编辑:@Alladinian提出了一个很好的观点,即rangeOfString:执行区分大小写的搜索。如果您希望它不区分大小写,则必须更改:
NSRange range = [words rangeOfString:@"o"];
到
NSRange range = [words rangeOfString:@"o" options:NSCaseInsensitiveSearch];