iphone - 基于 NSStrings 数组从对象的 NSArray 中提取字符串

标签 iphone objective-c ios nsarray

好吧,这有点晦涩,但这让我很头疼。

如果你有一个字符串数组

{@"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/

相关文章:

iphone - REST -> XML -> 核心数据 -> UITableView 的好策略吗?

iphone - 更改 UINavigationBar 的后退按钮

java - 使用 iOS 共享菜单在 RoboVM 中共享?

iphone - 如何将数据从一个 View 传回 IOS 中的另一个 View ?

iphone - 使用其他用户名登录 FaceBook

iphone - NSInternalInconsistencyException 找不到实体名称的 NSManagedObjectModel

ios - 具有低 alpha 背景但标题完全不透明的 UIButton?

ios - 应用过滤器(AVAudioUnitEQ)后保存音频文件并最终将其保存为mp3?

objective-c - 为什么在方法签名中使用 (id) 而 (NSObject *) 会更精确?

ios - 从 Result<T> 转换为不相关的类型 T 时崩溃总是失败