簡體   English   中英

在swift中使用for循環來總結數組的問題

[英]Issues summing up array using for loop in 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)

它給了我以下錯誤:

關於行sum = sum + number Binary operator '+' cannot be applied to operands of type 'Int' and 'A' sum = sum + number

關於行return sum Int is not convertible to 'U'

我知道這可以通過reduce方法更好地完成,但是我想使用迭代完成任務來實現這個實例。 為什么會出現這些錯誤? 我從未明確表示T是Int。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM