2010-11-17 5 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

사용은 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이 형식에서 술어를 구축하기 위해 자신의 미니 언어를 사용

. 당신이 4.0 이상 아이폰 OS를 대상으로하는 경우 형식 문법은 "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

멋진 설명! –