2010-11-17 4 views
7

これはちょっとわかりにくいですが、頭痛の種です。NSStringの配列に基づいてオブジェクトのNSArrayから文字列を抽出する

あなたは、文字列

{@"1", @"2", @"4"} 

の配列を持っている場合は、レシピの配列が、私は、最初の配列を使用して、このような配列を作成する方法を

{ {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"} 

ither単語では、最初の配列の数字を取得し、recipe_namの配列を作成していますES recipe_idは数字...

はレシピのあなたの配列はオブジェクト

答えて

5

は基本的に辞書で に一致する場所:

NSArray *result = [[recipeDict dictionaryWithValuesForKeys:recipeIDs] allValues]; 
NSDictionary *recipeDict = 
    [NSDictionary dictionaryWithObjects:[recipes valueForKey:@"recipe_name"] 
           forKeys:[recipes valueForKey:@"recipe_id"]]; 

と辞書にあなたはキー値コーディング方法を使用することができます

2

あなたがそうのような述語を使用することができます(彼らはほとんど常にである)あなたのRecipeオブジェクトは、キーと値に準拠していると仮定すると:

NSArray *recipes= // array of Recipe objects 
NSArray *recipeIDs=[NSArray arrayWithObjects:@"1",@"2",@"3",nil]; 
NSPredicate *pred=[NSPredicate predicateWithFormat:@"recipe_id IN %@", recipeIDs]; 
NSArray *filterdRecipes=[recipes filteredArrayUsingPredicate:pred]; 
NSArray *recipeNames=[filterdRecipes valueForKey:@"recipe_name"]; 
12

正確にそれらのオブジェクトを選択するには-[NSArray filteredArrayUsingPredicate:]を使用し、その後、あなたが希望するオブジェクトの種類を指定するには、NSPredicateを使用します。

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は形式から述語を構築するために、自身のミニ言語を使用しています。あなたが4.0以降のiOSをターゲットにしている場合は形式文法が"Predicate Programming Guide."

に記載されて、より柔軟な選択肢は-[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]; 
+0

ニースの説明が! –

関連する問題