2014-10-20 84 views
0

当用户在Ruby中输入类似单词时,如何计算单词“supercaliforniightight”中出现的字母的频率,并打印出星号或星号以计算出现的字母数量?如何计算用户输入中字母的频率?

这里是我的代码:

puts "Enter string: " 
text= gets.chomp 
text.downcase! 
words = text.split(//) 

frequencies = Hash.new(0) 

words.each{|item| frequencies[item] +=1} 

frequencies = frequencies.sort_by{ |item, amount| amount} 
frequencies.reverse! 

frequencies.each do |item, amount| 
    puts item + " " + amount.to_s 
    end 

我想输出是这样的:

Enter a string: 
uuuuiiii 
u , 4 **** 
i , 4 **** 
+0

什么是'text'? – sawa 2014-10-20 02:00:51

+1

我花了一段时间才明白你的问题。你首先说,“你如何计算字母的频率......”,然后继续提出这样做​​的代码。据推测,你的问题只涉及你输出的格式。事实上,你计算频率的方式是无关紧要的。你可能刚刚已经说过,对于''uuuuiii'',你构造了一个散列'h = {'u'=> 4,'i => 3}',并且想知道如何产生特定的输出格式。无论如何,今后请清楚你的问题。 – 2014-10-20 02:39:06

回答

2

我改变了输出一点点(删除逗号之前的空间),这样我不看起来没有受过教育。

puts "Enter string: " 
gets.chomp.downcase 
.each_char.with_object(Hash.new(0)){|c, h| h[c] += 1} 
.sort_by{|_, v| v} 
.reverse 
.each{|k, v| puts k + ", " + v.to_s + " " + "*" * v} 

输出:

Enter string: 
uuuuiiii 
i, 4 **** 
u, 4 **** 
+0

谢谢!我很好奇,如果有一个更可读的方式做到这一点? – user2353565 2014-10-20 02:14:07

+0

哪一部分难以阅读? – sawa 2014-10-20 02:14:47

+0

您可以将它们分配给每个语句的变量吗? – user2353565 2014-10-20 02:17:05