2012-01-14 2 views
1

나는이 같은있는 NSDictionary가 있다면 :배열의 객체를 사전의 값으로 대체하는 데 NSPredicates를 사용할 수 있습니까?

NSMutableDictionary *valuesDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
[NSNumber numberWithDouble:-60.0],@”a”, 
[NSNumber numberWithDouble:0.0],@”b”, 
[NSNumber numberWithDouble:-12.0],@”c”, 
[NSNumber numberWithDouble:.3],@”x”, nil]; 

과 같은 배열을 :

코드 "로 구성된 @, 예를 들어, 배열 programWithVariableValues을 반환 어떻게 보이는지

NSArray *program = [NSArray arrayWithObjects: @"a",@"12.6",@"100",@"+",@"x",nil]; 
- 60 ", @"12.6 ", @"100 ", @"+ ", @"3 ", nil?

가 그 자 NSPredicate를 활용하기에 좋은 장소가 될 것인가 (자신의 valueforkey의와 배열에있는 모든 변수를 대체)? 또는 단지 빠른 열거? 또는 다른 것?

답변

1

이 술어 및/또는 valueForKeyPath 연산자를 사용 영리한 한 줄의 해결책이 될 수 있지만, 때까지 누군가가 한 개, 이것은 트릭을 할 것을 수치 수 있습니다 (

NSMutableArray *programWithVariableValues = [NSMutableArray array]; 
for (NSString *key in program) 
{ 
    [programWithVariableValues addObject:[[valuesDictionary objectForKey:key] description] ?: key]; 
} 

programWithVariableValues ​​배열 이제 값을 포함 문자열로). 숫자를 NSNumber로 유지하려면 "[... description]"호출을 사용하십시오.

+0

감사합니다. 그 위대한 작품. 그래서 기본적으로, 값 사전에 일치하는 것이 없으면? : 그냥 우아한 키를 넣습니다. objc는 나에게 성장하고있다. –

+0

예, "foo? : bar"는 기본적으로 "foo? foo : bar"또는 "if (foo) {return foo} else {return bar}"를 작성하는 속기 방법입니다. 그래서 논리는 "사전에있는 객체를 키로 잡아서 반환합니다. 대신 키를 사용하면됩니다." –

+0

대부분의 것들이 그런 조건부가 될 수있는 방법에 익숙해 져야합니다 ... 정말 멋지다 생각합니다. –

관련 문제