0

我是一名 Objective-C 初学者,现在我想循环遍历一个数组并检查子字符串是否在其中。如果为真,则应将数组的对象放入另一个数组中,该数组将显示在屏幕上。这是我的代码:

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

在这种情况下,我们应该得到一个由“一”、“二”和“四”组成的数组,因为它们都包含一个“o”。不幸的是,我的文本视图中有一个空数组。(我知道“描述”仅用于调试目的)。有人可以告诉我如何正确执行此操作吗?

4

2 回答 2

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

用于不区分大小写的匹配

于 2012-06-20T14:12:29.190 回答
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];
于 2012-06-20T14:06:12.873 回答