Mam tablicę liczb dziesiętnych jako ciągi, potrzebuję uzyskać sumę tablicy, Próbowałem iteracji nad tablicą i zmieniając każdą liczbę na float, ale to po prostu zwraca liczbę całkowitą za każdym razem i potrzebuję sumy w postaci dziesiętnej. Do jakiego typu danych powinienem zmienić ciąg, a najlepszy sposób uzyskania sumy tablicowej byłby pomocny.Jak uzyskać sumę tablicę ciągów w ruby
Odpowiedz
Trzeba tylko zrobić
array.map(&:to_f).reduce(:+)
Objaśnienie: -
# it give you back all the Float instances from String instances
array.map(&:to_f)
# same as
array.map { |string| string.to_f }
array.map(&:to_f).reduce(:+)
# is a shorthand of
array.map(&:to_f).reduce { |sum, float| sum + float }
Dobra odpowiedź. Sądzę, że OP zyskałby na pewnym wytłumaczeniu. – joews
["Jeśli nie określisz jawnie wartości początkowej dla' memo', to pierwszy element kolekcji jest używany jako wartość początkowa 'memo'."] (Http://ruby-doc.org/core-2.1 .2/Enumerable.html # method-i-inject), więc nie trzeba określać początkowego "0.0". –
@muistooshort Tak się stało. Nie wiem dlaczego :(Ale tak, poprawiłem to.Dziękuję za komentarz –
a = ["12.4", "48.2"]
a.inject(0) {|s,e| s.to_f + e.to_f } #=> 60.6
inject
pozwala na zbieranie wartości w poprzek. Dokumentacja #inject
myślę, że można użyć jednej z następujących stwierdzeń:
array.map(&:to_f).reduce(:+)
array.sum(&:to_f)
- Najpierw stawiamy ciąg liczb do tablicy ciągów
- drugie możemy zmienić cały blok w liczbach
- Następnie podsumowujemy wszystko, jeśli macierz jest pusty, nie otrzymujemy zero, ale 0
String do sumy
str='1,2,3,4'.split(',').map(&:to_i).inject(0,:+) #1+2+3+4=10
Array liczb w sumie
num=[1,2,3,4].inject(0,:+)#=>10
p str
p num
co jest "tablica liczb dziesiętnych jako łańcuchy"? Czy jest to tablica, numer lub ciąg znaków? Musisz poprawić swój angielski, aby zrozumieć siebie. – sawa
Wygląda na to, że próbowałeś czegoś, ale nie jest w 100% jasne, co to jest. Najłatwiej jest pokazać kod, w tym przykładowe wejście i to, co chciałbyś otrzymać. –
Gdy zadajesz takie pytanie, pomocne jest pokazanie przykładowego wejścia i żądanego wyniku, a także kodu, który napisałeś, aby spróbować rozwiązać problem. Bez tych rzeczy wygląda na to, że łowisz, żeby ktoś napisał dla ciebie kod. –