2010-11-17 11 views
7

dizisine bağlı olarak nesnelerin NSArray'ından gelen dizeleri ayıklamak, bu biraz belirsizdir, ancak bana başım ağrıyor.NSStrings

Eğer dizeleri

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

dizisi var Ve eğer Reçete'sinin bir dizi ben, ilk dizisi kullanarak, bu gibi bir dizi yaratacak nasıl

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

nesneleri vardır:

{@"Lasagna", @"Burger", @"Roast Chicken"} 

Her kelimede, ilk dizideki sayıları almak ve bir recipe_nam dizisi oluşturmak es recipe_id numaralarını ...

tarifin Kişisel dizi nesneleri

cevap

5

temelde bir sözlük olduğu maçları burada:

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

Ve sözlüğe Eğer anahtar-değer Coding yöntemi kullanabilirsiniz

2

bunu gibi bir yüklemi kullanabileceğiniz Recipe nesneleri (hemen her zaman olan) anahtar-değer uyumlu olduğunu varsayarsak:

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"]; 
.210
12

kullanın bir NSPredicate tam bu nesneleri seçmek için -[NSArray filteredArrayUsingPredicate:] kullanmak sonra, istediğiniz nesnelerin türünü belirtmek için:

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 bir biçimden bir yüklemi oluşturmak için kendi mini dili kullanır

. Eğer 4.0+ iOS hedefliyorsanız biçim grameri "Predicate Programming Guide."

belgelenmiştir, daha esnek bir alternatif -[NSArray indexesOfObjectsPassingTest:] kullanmaktır:

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

Güzel açıklama !! –