Так у меня есть следующий код, который подсчитывает частоту каждой буквы в строке (или в данном конкретном случае из файла):Подсчет символов
def letter_frequency(file)
letters = 'a' .. 'z'
File.read(file) .
split(//) .
group_by {|letter| letter.downcase} .
select {|key, val| letters.include? key} .
collect {|key, val| [key, val.length]}
end
letter_frequency(ARGV[0]).sort_by {|key, val| -val}.each {|pair| p pair}
который прекрасно работает, но я хотел бы посмотрите, есть ли что-нибудь, чтобы что-то сделать в рубине, что похоже на это, но чтобы поймать все различные возможные символы? т.е. пространства, запятые, периоды и все между ними. Я предполагаю, что проще сказать, есть ли что-то похожее на 'a' .. 'z'
, которое содержит все символы? Надеюсь, это имеет смысл.
Это имеет смысл. В итоге я сделал что-то очень похожее. Мне просто интересно, есть ли какая-то легкая одна строка, которая будет инкапсулировать каждый возможный символ, имеет смысл, если нет, однако. – Luminusss
Существует несколько методов, которые касаются символов, которые могут представлять интерес для вашего случая, например ['ascii_only?'] (Http://www.ruby-doc.org/core-2.1.4/String.html # метод-я-ascii_only-3F). Однако я не знаю способа представления «действительного символа» в Ruby. Например, 'each_char' либо вернет допустимый символ, либо поднимет исключение, если он не сможет правильно закодировать его из входного файла. –