计算和计算ruby中单词的平均长度

时间:2016-02-11 04:57:40

标签: arrays ruby string average

我正在尝试在ruby中调试一个程序,用于计算和打印数组中单词的平均长度。

words = ['Four', 'score', 'and', 'seven', 'years', 'ago', 'our', 'fathers', 'brought', 'forth', 'on', 'this', 'continent', 'a', 'new', 'nation', 'conceived', 'in', 'Liberty', 'and', 'dedicated', 'to', 'the', 'proposition', 'that', 'all', 'men', 'are', 'created', 'equal']

word_lengths = Array.new

words.each do |word|

  word_lengths << word_to.s

end

sum = 0
word_lengths.each do |word_length|
  sum += word_length
end
average = sum.to_s/length.size
puts "The average is " + average.to_s

显然,代码无效。当我运行该程序时,我收到一条错误消息,指出字符串'+'无法强制转换为fixnum(typeerror)。

我该怎么做才能让代码计算数组中字符串的平均长度?

2 个答案:

答案 0 :(得分:7)

<强>尝试

words.join.length.to_f / words.length

<强>解释

这一起利用了链接方法。首先,words.join给出了数组中所有字符的字符串:

'Fourscoreandsevenyearsagoourfathersbroughtforthonthiscontinentanewnationconcei
vedinLibertyanddedicatedtothepropositionthatallmenarecreatedequal'

然后我们应用length.to_f将长度作为浮点数(使用浮点数确保最终结果准确):

143.0

然后我们使用/ words.length

划分上述内容
4.766666666666667

答案 1 :(得分:1)

试试这个。

words = ['Four', 'score', 'and', 'seven', 'years', 'ago', 'our', 'fathers',
 'brought', 'forth', 'on', 'this', 'continent', 'a', 'new', 'nation',
 'conceived', 'in', 'Liberty', 'and', 'dedicated', 'to', 'the', 'proposition',
 'that', 'all', 'men', 'are', 'created', 'equal']


sum = 0
words.each do |word|
  sum += word.length

end

average = sum.to_i/words.size
puts "The average is " + average.to_s

您不必拥有单独的word_lengths变量来保留words数组中所有单词的大小。如果没有循环遍历word_lengths数组,您可以将两个循环合并到一个循环中,就像我在帖子中给出的那样。

你获得word长度的方式是错误的。使用word.length。见here