如何过滤NSArray

时间:2013-01-21 12:52:52

标签: ios objective-c properties filter nsarray

嘿我想要过滤NSArray。在这个数组中有很多信息,如姓名,城镇,电话号码等。但是阵列中有些城镇是两到三次 我有一个镇上的财产。
所以我只想要arry中与属性匹配的那些对象。

例如: 在数组中:

  1. Frank,New York,123456
  2. 奥利弗,纽约,123456
  3. Thomas,Boston,123456
  4. 当属性是纽约时,我想要olny对象1和2.

    有谁知道我该怎么办?

    这是我的代码:

    NSString *filterString = newsArticle;
    NSPredicate *prediacte = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"Ort == '%@'",filterString]];
    newsTownArray = [news filteredArrayUsingPredicate:predicate];
    

    当我走到界限时:

    cell.textLabel.text=[[newsTownArray objectAtIndex:indexPath.row] objectForKey:"Name"];
    

3 个答案:

答案 0 :(得分:4)

您需要使用NSPredicate

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"town == 'New York'"];
[yourArray filterUsingPredicate:predicate];

动态地,您可以创建谓词,如:

NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"town == '%@'",yourInput]];

此处yourInputNSString,其中包含所需的城镇名称。

请查看这些文章了解更多详情:

  1. codeproject
  2. useyourloaf

答案 1 :(得分:0)

但是你可以使用 NSPredicate 在一个数组中完成它,但我建议稍微改变一下,这将增加你的代码和良好的编程方式。

创建具有这些属性Personnamecity的自定义类telephone

创建一个存储Person

对象的数组

在此之后,你可以很容易地操作/过滤/排序等。


NSString *filterCity=@"Delhi";

NSMutableArray *yourArray=[NSMutableArray arrayWithArray:self.persons];
NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"city == '%@'",filterCity]];
[yourArray filterUsingPredicate:predicate];

NSLog(@"Filtered");
for (Person *per in yourArray) {
    NSLog(@"Name: %@, City: %@, Telephone: %@",per.name, per.city, per.telephone);

}

答案 2 :(得分:0)

使用此代码

NSMutableArray *subpredicates = [NSMutableArray array];

    for(NSString *term in arryOfWordsToBeSearched) {
        NSPredicate *p = [NSPredicate predicateWithFormat:@"self contains[cd] %@",term];
        [subpredicates addObject:p];
        }

     NSPredicate *filter = [NSCompoundPredicate andPredicateWithSubpredicates:subpredicates];
    result = (NSMutableArray*)[arryOfDummyData filteredArrayUsingPredicate: filter];