返回值最接近0,包括负数

时间:2015-09-21 03:43:12

标签: objective-c return nsdictionary

我有一个NSDictionary我希望将相应的密钥返回到最接近的零(包括那些带有负数的密钥):

NSDictionary *dict = @{
                       @"David" : @-89,
                       @"Bobby" : @61,
                       @"Nancy" : @-8,
                       @"Sarah" : @360,
                       @"Steve" : @203
                      };

所以在这种情况下Nancy最接近...... 我怎样才能做到这一点?我搜索了但是空了。

2 个答案:

答案 0 :(得分:2)

这是一个简单的最大问题,

NSString *curMinKey = [dict.allKeys firstObject];
NSInteger curMinVal = ABS([[dict objectForKey:curMinKey] integerValue]);
for(id key in dict) {
    if(curMinVal > ABS([[dict objectForKey:key] integerValue])) {
        curMinKey = key;
        curMinVal = ABS([[dict objectForKey:key] integerValue]);
    }
}
/// curMinKey is what you are looking for

答案 1 :(得分:1)

简单地迭代值并跟踪哪一个最接近零。使用abs处理绝对值。

免责声明 - 以下代码未经过测试 - 可能是拼写错误。它也假设整数。根据需要进行调整以支持浮点值。

NSDictionary *dict = ... // your dictionary
NSInteger closestValue = NSIntegerMax;
NSString *closestKey = nil;
for (NSString *key in [dict allKeys]) {
    NSNumber *value = dict[key];
    NSInteger number = (NSInteger)labs((long)[value integerValue]);
    if (number < closestValue) {
        closestValue = number;
        closestKey = key;
    }
}

NSLog(@"Closest key = %@", closestKey);