gpt4 book ai didi

objective-c - 使用 KVC 跨 n 个键查找最小值

转载 作者:行者123 更新时间:2023-11-29 04:35:25 25 4
gpt4 key购买 nike

再次卡在 Obj-C 中的 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

感谢任何指点:)

最佳答案

一个简单的解决方案是首先找到每个键的最小值,然后在第二步中找到这些最小值中的最小值。

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"];

关于objective-c - 使用 KVC 跨 n 个键查找最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11121614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com