在swift中使用for循环来总结数组的问题

时间:2015-04-22 18:22:49

标签: arrays swift

我正在尝试迭代一个数组并使用泛型来总结所有值,如下所示:

func reduceDaArray <T, U>(a: [T], startingValue: U, summed: (U, T) -> U) -> U {

    var sum = 0

    for number in a {
        sum = sum + number
    }

    return sum
}

reduceDaArray([2,3,4,5,6], 2, +) //(22)

它给了我以下错误:

关于第Binary operator '+' cannot be applied to operands of type 'Int' and 'A'

sum = sum + number

关于第Int is not convertible to 'U'

return sum

我知道使用reduce方法可以更好地完成这项工作,但是我希望使用迭代完成任务以获得一些练习。为什么会出现这些错误?我从未明确表示T是Int。

1 个答案:

答案 0 :(得分:3)

reduceDaArray()函数

var sum = 0

声明一个整数,而不是使用给定的startingValue。 并且

sum = sum + number

尝试将泛型数组元素添加到该整数,而不是使用 给定的summed关闭。

所以你的意思是

func reduceDaArray <T, U>(a: [T], startingValue: U, summed: (U, T) -> U) -> U {

    var sum = startingValue
    for number in a {
        sum = summed(sum, number)
    }
    return sum
}

编译并按预期工作:

let x = reduceDaArray([2, 3, 4, 5, 6], 2, +)
println(x) // 22
let y = reduceDaArray([1.1, 2.2], 3.3, *)
println(y) // 7.986
let z = reduceDaArray(["bar", "baz"], "foo") { $0 + "-" + $1 }
println(z) // foo-bar-baz