2014-10-20 2 views
0

Как подсчитать частоту букв, которые появляются в слове «supercaliforniamightly», когда пользователь вводит такое слово в Ruby и распечатывает звезды или звездочки, чтобы подсчитать количество букв, которые появляются?Как подсчитать частоты букв в пользовательском вводе?

Вот мой код:

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

+1

Мне потребовалось некоторое время, чтобы понять ваш вопрос. Вы начинаете с того, что говорите: «Как вы считаете частоту букв ...», затем переходите к представлению кода, который делает это просто отлично. Предположительно, ваш вопрос касается только форматирования вашего вывода. Фактически, способ вычисления частот не имеет значения. Возможно, вы только что сказали, что для '' uuuuiii'' вы построили хэш 'h = {'u' => 4, 'i => 3}' и хотели знать, как создать конкретный выходной формат. В любом случае, в будущем, проясните, о чем вы просите. –

ответ

2

Я изменил выходной сигнал немного (удалили пробел перед запятой), так что я не» t выглядят необразованными.

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

+0

Какую часть вам трудно читать? – sawa

+0

Можете ли вы назначить их переменной для каждого из операторов? – user2353565

Смежные вопросы