【问题标题】:Convert array of strings to array of floats in Ruby to get mean/average value将字符串数组转换为 Ruby 中的浮点数组以获得平均值/平均值
【发布时间】:2021-09-15 20:34:32
【问题描述】:

我有一个file.txt,每行都有一个浮点值:

23.45
12.01
15
900.6543

我想获得这些值的平均值,所以我阅读了它们的文本。这是我的script.rb

#!/usr/bin/ruby
require 'bigdecimal'
require 'bigdecimal/util'
array = IO.readlines 'file.txt'
array.map(&:to_f)
numerator = array.reduce(0) { |a, v| a + v }
denominator = array.count
mean = numerator.to_f / denominator.to_f
puts mean

ruby script.rb 出现以下错误:

Traceback (most recent call last):
        4: from list2.rb:7:in `<main>'
        3: from list2.rb:7:in `reduce'
        2: from list2.rb:7:in `each'
        1: from list2.rb:7:in `block in <main>'
list2.rb:7:in `+': String can't be coerced into Integer (TypeError)

有什么建议吗?

【问题讨论】:

    标签: arrays ruby-on-rails ruby math


    【解决方案1】:

    当您使用array.map(&amp;:to_f) 时,您创建了一个新的浮点数组......您什么也没做。您要么想将其分配给变量并使用它,要么使用#map! 修改array

    array.map!(&:to_f)
    

    【讨论】:

    • 重要的是你明白它为什么起作用。 :-)
    • 与您的问题无关,但您可以将array.reduce(0) { |a, v| a + v } 简化为array.reduce(0, &amp;:+) 甚至只是array.reduce(&amp;:+)
    • 很棒的提示,甚至更短的脚本!
    • p mean = (array.sum(&amp;:to_r) / array.size).to_f 你不需要大数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多