2014-03-26 102 views
-4

删除的对象。例如,我有这样的一个数组,每个对象有类型的对象:与条件的NSArray

{ 
    {//ob1 
    name = "zmg"; 
    link = "abccom"; 
    adress = "123 street"; 
    son = "2"; 
    }, 

    {//ob2 
    name = "asf"; 
    link = "http://fsdfabccom"; 
    adress = "123 street"; 
    son = "1"; 
    }, 

    {//ob3 
    name = "asf"; 
    adress = "123 street"; 
    son = "5"; 
    }, 

    {//ob4 
    name = "sadfsdfasdf"; 
    link = "http://fsdfasdfasdfabc.com"; 
    adress = "123 street"; 
    son = "2"; 
    }, 

    {//ob5 
    name = "asf"; 
    adress = "123 street"; 
    son = "4"; 
    }, 
} 

,如果我要删除所有对象我能做些什么,在这没有对象“链接”(在这个例子中:ob3,ob5必须被删除); 结果必须是:

{ 
    {//ob1 
    name = "zmg"; 
    link = "abccom"; 
    adress = "123 street"; 
    son = "2"; 
    }, 

    {//ob2 
    name = "asf"; 
    link = "http://fsdfabccom"; 
    adress = "123 street"; 
    son = "1"; 
    }, 
    {//ob3 
    name = "sadfsdfasdf"; 
    link = "http://fsdfasdfasdfabc.com"; 
    adress = "123 street"; 
    son = "2"; 
    }, 

} 

非常感谢!

+0

文件你可以问之前使用'NSPredicate'和'filteredArrayUsingPredicate' – Larme

+3

无法搜索的人? – matt

回答

1

尝试这种方式。你应该阅读苹果的这一https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Articles/pUsing.html

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(link != null)"]; 
NSArray *array2 = [array filteredArrayUsingPredicate:predicate]; 
+0

谢谢你,但我只需要1个问题就能理解。 因此,如果我想要收集包含字符串“http://1df.com”的链接的所有对象(例如“http://1df.com/1faf”,http: //1df.com/gfdfbcvb“,”http://1df.com/ibic“)。 非常感谢! – BigEARS

+0

只是改变谓词如下。我建议你阅读我在答案中提出的链接,因为它会向你展示一些可以用于NSPredicates的清晰示例。 'NSPredicate * predicate = [NSPredicate predicateWithFormat:@“(链接以'1df.com'开头))];' – nsuinteger

+0

谢谢。如何“或”(以'1df.com'开头或以'2df.com'开头)。对不起,烦人 – BigEARS

2

这应该工作。根据是否有链接过滤给定的数组。

NSArray *newArray = [array filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { 
     return evaluatedObject.link; 
    }]; 

而且它在斯威夫特更简单了:

let filtered = array.filter { (item) -> Bool in 
    return item > 2 
} 
1

filteredArrayUsingPredicate(如上所述)是一个好主意,让你的项目的列表中删除 - 然后创建一个新的阵列减去项目删除。

请注意,您也可以以相反的方式执行查询,以便返回要保留的项目数组。然后保持这一点并相应地使用它。

+1

谢谢!这对我很有用 – BigEARS

0

这也应该工作:

NSArray* filteredArray = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%@ IN [email protected]" ,@"link"]];