Возвращаемое значение ближе к 0, включая отрицательные числа

У меня есть NSDictionary который я хотел бы вернуть соответствующий ключ ближайший ноль (в том числе с отрицательными числами):

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

Так что в этом случае Nancy будет ближе всего... Как я могу это сделать? Я искал, но пришел пустым.

2 ответа

Решение

Просто итерируйте значения и отслеживайте, какое из них ближе всего к нулю. использование 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);

Это простая макс мин проблема,

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
Другие вопросы по тегам