2012-06-20 2 views
0

Obj-C의 KVC에서 다시 고정됩니다.n 키 전체에서 KVC를 사용하여 최소값 찾기

KVC를 사용하여 여러 키에서 최소값을 찾고 싶습니다. 쉽게

NSArray *data = [[NSArray alloc] initWithObjects: 
       [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:2.0], @"a", [NSNumber numberWithFloat:5.0], @"b", [NSNumber numberWithFloat:4.0], @"c", nil], 
       [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:3.0], @"a", [NSNumber numberWithFloat:1.0], @"b", [NSNumber numberWithFloat:1.5], @"c", nil], 
       [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:9.0], @"a", [NSNumber numberWithFloat:7.0], @"b", [NSNumber numberWithFloat:6.0], @"c", nil], 
       nil]; 

내가 'A', 'B'또는 'C'의 최소 값을 찾을 수 있습니다 :

는 다음과 같은 배열을 고려 나는에 걸려 무엇

float minKeyA = [[data valueForKeyPath:@"@min.a"] floatValue]; // value: 2.0 
float minKeyB = [[data valueForKeyPath:@"@min.b"] floatValue]; // value: 1.0 
float minKeyC = [[data valueForKeyPath:@"@min.c"] floatValue]; // value: 1.5 

NSSet 또는 NSArray 키를 가져 와서 해당 키 풀에서 최소값을 찾으십시오.

NSSet *keySet1 = [NSSet setWithObjects:@"a", @"b", nil]; 
// use to find absolute minimum value across keys 'a' and 'b' --> desired value 1.0 
NSSet *keySet2 = [NSSet setWithObjects:@"a", @"c", nil]; 
// use to find absolute minimum value across keys 'a' and 'c' --> desired value 1.5 
NSSet *keySet3 = [NSSet setWithObjects:@"a", @"b", @"c", nil]; 
// use to find absolute minimum value across keys 'a', 'b', and 'c' --> desired value 1.0 

어떤 포인터를 음미 :)

답변

1

본래의 용액 제, 각 키에 대한 최소값을 발견 한 후, 제 2 단계에서 그 최소값 중에서 최소값을 발견하는 것이다.

NSMutableSet *localMinima = [NSMutableSet setWithCapacity:[keySet1 count]]; 
for (NSString *key in keySet1) { 
    NSString *keyPath = [NSString stringWithFormat:@"@min.%@", key]; 
    NSNumber *localMin = [data valueForKeyPath:keyPath]; 
    [localMinima addObject:localMin]; 
} 
NSNumber *globalMin = [localMinima valueForKeyPath:@"@min.self"]; 
+0

아마도이 접근법이 가장 단순 할 것이라고 생각합니다. 아무도 다음 날 더 나은 접근 방식으로 응답하지 않으면 나는 맞는 것으로 받아 들일 것입니다. 감사 :) –