Próbuję użyć foldLeft w tablicy. Np .:Użyj tablicy jako zasobnika Scala foldLeft
var x = some array
x.foldLeft(new Array[Int](10))((a, c) => a(c) = a(c)+1)
To odmawia skompilowania z błędem znalezionym Int (0) wymagany Array [Int].
Próbuję użyć foldLeft w tablicy. Np .:Użyj tablicy jako zasobnika Scala foldLeft
var x = some array
x.foldLeft(new Array[Int](10))((a, c) => a(c) = a(c)+1)
To odmawia skompilowania z błędem znalezionym Int (0) wymagany Array [Int].
Aby korzystać foldLeft
w co chcesz zrobić, a po swój styl, można po prostu wrócić sama tablica akumulator w obliczeniach tak:
val ret = a.foldLeft(new Array[Int](10)) {
(acc, c) => acc(c) += 1; acc
}
Alternatywnie, ponieważ numery są od 0 do 9, można też to zrobić, aby osiągnąć ten sam rezultat:
val ret = (0 to 9).map(x => a.count(_ == x))
Przypisanie w Scali nie zwraca wartości (ale zamiast jednostki), więc wyrażenie, które ma zwrócić tablicę [Int] do następnego kroku, zwraca jednostkę, która nie działa.
Trzeba by użyć blok i zwróci tablicę w końcu jak to:
x.foldLeft(new Array[Int](10)) { (a, c) =>
a(c) = a(c)+1
a
}
Oczywistym wyjaśnieniem jest to, że jeśli nie przypiszesz wyniku 'foldLeft' do czegoś, to zostanie ono utracone. Ale na wszelki wypadek. – ale64bit
Czy zdajesz sobie sprawę, że 'niektóre obliczenia' muszą być obliczone na' Array [Int] 'i że' new Array [Int] (10) 'tworzy tablicę 10 elementów? Byłoby pomocne, gdyby pokazać pozostałą część kodu. Lub przynajmniej intencję. – ale64bit
Dodano kod. – user1742188
'a (c) = a (c) + 1' ma typ' Unit', gdy potrzebujesz 'Array [Int]'. Co dokładnie chcesz osiągnąć za pomocą kodu? – ale64bit