2014-09-04 3 views
0

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

В основном это, но с current является неизменяемым. Я должен вернуть новый словарь, эквивалентный тому, что было бы, если бы я сделал следующее:

func newDictionaryWithValueAdded(current:Dictionary<Int, Double>, amount: Int) -> Dictionary<Int, Double> { 
    // current[amount] = amount/100 
    // return amount 
} 

Есть ли функция для этого? Что-то похожее на конкатенацию массива?

+0

Также этот подход слишком медленно? Это довольно стандартный для других неизменяемых функциональных языков? –

ответ

0

Вы можете объявить параметр функции как переменной с var. В следующем примере, current является копией переданного словаря (потому что словари являются типами значений), но могут быть изменены в функции:

func newDictionaryWithValueAdded(var current:Dictionary<Int, Double>, amount: Int) -> Dictionary<Int, Double> { 
    current[amount] = Double(amount)/100 
    return current 
} 

let dict1 : [Int : Double] = [:] 
let dict2 = newDictionaryWithValueAdded(dict1, 12) 

println(dict1) // [:] 
println(dict2) // [12: 0.12] 
Смежные вопросы