好吧,这有点晦涩,但这让我很头疼。
如果你有一个字符串数组
{@"1", @"2", @"4"}
你有一个 Recipe 对象数组
{ {recipe_name:@"Lasagna", recipe_id:@"1"}
{recipe_name:@"Burger", recipe_id:@"2"}
{recipe_name:@"Pasta", recipe_id:@"3"}
{recipe_name:@"Roast Chicken", recipe_id:@"4"}
{recipe_name:@"Sauerkraut", recipe_id:@"5"}
}
我如何使用第一个数组创建这样的数组:
{@"Lasagna", @"Burger", @"Roast Chicken"}
换句话说,它采用第一个数组中的数字并创建一个 recipe_names 数组,其中 recipe_id 与数字匹配...
最佳答案
使用 NSPredicate
指定您想要的对象类型,然后使用 -[NSArray filteredArrayUsingPredicate:]
精确选择这些对象:
NSArray *recipeArray = /* array of recipe objects keyed by "recipe_id" strings */;
NSArray *keyArray = /* array of string "recipe_id" keys */;
NSPredicate *pred = [NSPredicate predicateWithFormat:@"recipe_id IN %@", keyArray];
NSArray *results = [recipeArray filteredArrayUsingPredicate:pred];
NSPredicate
使用它自己的迷你语言从格式构建谓词。格式语法记录在 "Predicate Programming Guide." 中
如果你的目标是 iOS 4.0+,一个更灵活的选择是使用 -[NSArray indexesOfObjectsPassingTest:]
:
NSIndexSet *indexes = [recipeArray indexesOfObjectsPassingTest:
^BOOL (id el, NSUInteger i, BOOL *stop) {
NSString *recipeID = [(Recipe *)el recipe_id];
return [keyArray containsObject:recipeID];
}];
NSArray *results = [recipeArray objectsAtIndexes:indexes];
关于iphone - 基于 NSStrings 数组从对象的 NSArray 中提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4210337/