2014-10-20 50 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