Возвращаемое значение ближе к 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