Recentemente, li uma matriz em CSV, digamos [‘500’, ‘1000’, ’20’] por exemplo.
Eu precisava somar isso e não queria convertê-lo em um GSL :: Vector para fazer o somatório.
Então, mudei para o antigo método ruby ​​array.inject, da seguinte maneira:
a = ['500','1000','20']
Total = a.inject(:+)
=> "5001000020"
Não era isso que eu esperava. Principalmente porque esqueci de converter os dados do meu arquivo em ints ou floats reais.
Eu tinha feito isso primeiro:
a = ['500','1000','20']
a.map!{|v| v.to_f}
Total = a.inject(:+)
=> 1520.0
Agora sim 🙂
Injetar é incrÃvel, mas se você estiver codificando até as 3 da manhã, poderá acabar com um número ENORME na função estatÃstica que está escrevendo.
http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-inject
http://ruby-doc.org/core-2.0.0/String.html#method-i-2B
Em uma nota relacionada! Evite todos os problemas ao fazer com que seu arquivo seja lido corretamente em primeiro lugar:
CSV.read("data/my.csv",
{:headers => "event_time,some_number,name,duration,count,rate,tags,title",
:header_converters => :symbol,
:converters => :all})
E sim, essa mágica :all
parece ser muito inteligente na conversão de tipos nas coisas certas, mas certifique-se e verifique antes de confiar nela.
http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html#method-i-converters