Objective c 检查子字符串是否在数组中并将其吐出

Objective c 检查子字符串是否在数组中并将其吐出,objective-c,Objective C,我是Objective-C初学者,现在我想通过数组循环,检查子字符串是否在其中。如果为true,则应将数组的对象放入另一个数组中,该数组将显示在屏幕上。这是我的代码: NSArray *origarray = [NSArray arrayWithObjects: @"One", @"Two", @"Three", @"Four",

我是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];
}
在这种情况下,我们应该得到一个由“1”、“2”和“4”组成的数组,因为它们都包含一个“o”。不幸的是,我的textview中有一个空数组。(我知道“说明”仅用于调试目的)。
是否有人可以告诉我如何正确执行此操作?

您得到空数组的原因是,每次迭代时,您都在重新分配数组。改为试试这个(注意,我将数组的分配放在循环之前,这样就可以完成一次并更新文本视图):

编辑:@Alladinian提出了一个很好的观点:rangeOfString:进行区分大小写的搜索。如果希望它不区分大小写,则必须更改:

NSRange range = [words rangeOfString:@"o"];


得到空数组的原因是,每次迭代时,都在重新分配数组。改为试试这个(注意,我将数组的分配放在循环之前,这样就可以完成一次并更新文本视图):

编辑:@Alladinian提出了一个很好的观点:rangeOfString:进行区分大小写的搜索。如果希望它不区分大小写,则必须更改:

NSRange range = [words rangeOfString:@"o"];


例如,您可以使用
NSPredicate

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains %@", @"o"];
NSArray* newArray = [origarray filteredArrayUsingPredicate:predicate];


例如,对于不区分大小写的匹配,可以使用
NSPredicate

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains %@", @"o"];
NSArray* newArray = [origarray filteredArrayUsingPredicate:predicate];


对于不区分大小写的匹配

,这就是问题所在@yoeriboven->我认为必须注意的是,
rangeOfString
进行区分大小写的搜索(因此只包括'Two'和'Four'),这将是问题所在@yoeriboven->另外,我认为必须注意,
rangeOfString
进行区分大小写的搜索(因此只包括'Two'和'Four')您可能需要使用@SELF contains[c]@“使其不区分大小写Eyeah,我认为他需要区分大小写的匹配,提供的示例是区分大小写的匹配。感谢您指出您可能需要使用@“SELF contains[c]@”使其不区分大小写Eyeah,我认为他需要区分大小写的匹配,提供的示例是区分大小写的匹配。谢谢你指出这一点
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@", @"o"];
NSArray* newArray = [origarray filteredArrayUsingPredicate:predicate];