Кто-нибудь может дать мне совет, как заменить количество букв звездочками? - PullRequest
0 голосов
/ 31 декабря 2018

Вот мой код и вывод ниже, я хотел бы иметь его, чтобы вместо того, чтобы сказать, сколько раз, он вывел бы число раз, когда буква появляется в форме звездочки.

Для примера, если ""появляется четыре раза в предложении, которое выдает результат: "a": ****

the_file='C:\Users\Jack\Documents\Ruby\Lab1\lyric.txt'
h = Hash.new
f = File.open(the_file, "r")
f.each_line { |line|
  words = line.split(//)
  words.each { |w|
    if h.has_key?(w)
      h[w] = h[w] + 1
    else
      h[w] = 1
    end
  }
}

# sort the hash by value, and then print it in this sorted order

h.sort{|a,b| a[1]<=>b[1]}.each { |elem|
  puts "\"#{elem[0]}\" : #{elem[1]} occurrences"
}

Снимок экрана моей текущей программы и вывод enter image description here

Ответы [ 4 ]

0 голосов
/ 31 декабря 2018

Я хотел бы показать другой возможный альтернативный способ достижения количества слов.Разделив чтение файла, давайте рассмотрим следующую строку:

line = 'Here is my code and output below, i would like to have it so that instead of saying how many occurrences, it would output the number of times the letter appears in asterisk form.'

h = Hash.new(0)
line.downcase.each_char{ |ch| h[ch] += 1 if ('a'..'z').include? ch }
h.to_a.sort_by(&:last).reverse.each { |ch, count| puts "#{ch}: " + "*" * count}
  • Инициализация хеша с помощью default = 0 позволит вам начать отсчет без проверки, существует ли ключ: Hash#default.
  • Итерация по строке на String#each_char
  • Я считал только буквы без учета регистра, до вас
  • Для сортировки измените хэшв массив с Hash#to_a
  • Для печати гистограммы, как показано в других сообщениях
0 голосов
/ 31 декабря 2018

Вместо #{elem[1]} occurences вам просто нужно написать #{'*' * elem[1]}

См. описание метода для более подробной информации.

0 голосов
/ 31 декабря 2018

Со строками в Ruby вы можете использовать математические операторы против них.Итак, вы знаете, сколько раз появляется письмо (в elem[1]).В этом случае вы можете просто умножить символ звездочки на эту сумму:

"\"#{elem[0]}: #{'*' * elem[1]}\""

0 голосов
/ 31 декабря 2018
puts "\"#{elem[0]}\": " + '*' * elem[1]

+ для объединения, string * number - повторение определенной строки number раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...