2015-04-22 14 views
5

próbuję wykonać iterację tablicy i zsumować wszystkie wartości za pomocą rodzajowych tak:Problemy podsumowujące tablicę używając pętli w szybkim

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) 

To daje mi następujące błędy:

Binary operator '+' cannot be applied to operands of type 'Int' and 'A' w odniesieniu do linii sum = sum + number

i

Int is not convertible to 'U' z odniesieniu do linii return sum

Wiem, że jest to lepsze dzięki metodzie redukcji, ale chciałem wykonać zadanie z wykorzystaniem iteracji dla tej instancji, aby uzyskać pewną praktykę. Dlaczego występują te błędy? Nigdy nie powiedziałem wprost, że T jest int.

Odpowiedz

3

W funkcji reduceDaArray(),

var sum = 0 

deklaruje całkowitą zamiast korzystania z danego startingValue. I

sum = sum + number 

próbuje włożyć ogólny element tablicy tej liczby całkowitej, zamiast stosowania dany summed zamknięcia.

Więc co prawdopodobnie oznaczało to

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 
} 

który kompiluje i działa zgodnie z oczekiwaniami:

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 
Powiązane problemy