2015-06-26 2 views
0

У меня есть базовый словарь список подобный этому:округлить до ближайшего значения ключа целого в словаре [Swift/IOS]

let fanFlow: [Int: String] = [100: "25 m/s", 350: "34 m/s", 420: "42 m/s"] 

Я пытаюсь сделать так, что если у меня есть значение в в середине этих цифр он будет округлен до следующего наибольшего числа чисел в списке словарей.

Например: Если у меня есть значение «250», оно будет округлено до следующего числа в списке, которое будет «350», вернувшись назад «34 м/с».

Пытался сделать это и не смог найти ничего, что могло бы мне помочь. Любая помощь будет замечательной!

Спасибо!

+0

Каково ваше желаемое поведение, когда нет ключа больше ключа вы начинаете с? Вы можете использовать свойство ключей быстрых словарей, чтобы получить массив ключей, а затем перебрать их, чтобы найти следующий по величине ключ, а затем получить значение для этого ключа. 'let keys = [Int] (fanFlow.keys) ' –

ответ

1

Как насчет:

let fanFlow = [100: "25 m/s", 350: "34 m/s", 420: "42 m/s"] 

func nextHighest(n: Int) -> String? { 
    return fanFlow 
    .keys 
    .filter { $0 > n } 
    .minElement() 
    .map { fanFlow[$0]! } 
} 

nextHighest(250) // "34 m/s" 

Или в Swift 1.2:

let fanFlow = [100: "25 m/s", 350: "34 m/s", 420: "42 m/s"] 

func nextHighest(n: Int) -> String? { 

    let higher = fanFlow.keys.filter { $0 > n }.array 

    return higher.isEmpty ? nil : fanFlow[minElement(higher)]! 

} 
+0

Спасибо, это именно то, что мне нужно! – DisplayName

1
let fanFlow: [Int: String] = [100: "25 m/s", 350: "34 m/s", 420: "42 m/s"] 
let fanFlowKeys = fanFlow.keys.array.sorted(<) 

func getFanFlow(input:Int) -> String { 
    for key in fanFlowKeys { 
     if input <= key { 
      return fanFlow[key]! 
     } 
    } 
    return "" 
} 

getFanFlow(250) // "34 m/s" 
+0

Спасибо, что мне тоже нужно! Я дал другой ответ правильный ответ, поскольку они сначала ответили. – DisplayName

+0

@DisplayName не беспокоится –

Смежные вопросы