Преобразование цифр в строке в целые, а затем обратно в строку - PullRequest
0 голосов
/ 14 февраля 2020

Скажем, у меня есть строка: formula = "C3H12O4"

Как я могу преобразовать символы di git в строке в целые числа? Моя конечная цель - сделать что-то вроде:

formula * 4

После преобразования formula символов в int, было бы лучше сообщить результат обратно в строку, таким образом

выводится как:

"C12H48O16"

Ответы [ 2 ]

2 голосов
/ 14 февраля 2020
formula = "C3H12O4"

Код

p formula.gsub(/\d+/) { |x| x.to_i * 4 }

выход

"C12H48O16"
0 голосов
/ 14 февраля 2020

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

h = (0..9).each_with_object({}) { |n,h| h[n.to_s] = (4*n).to_s }
  #=> {"0"=>"0", "1"=>"4", "2"=>"8", "3"=>"12", "4"=>"16",
  #    "5"=>"20", "6"=>"24", "7"=>"28", "8"=>"32", "9"=>"36"}

Затем для каждой интересующей строки будет выполнен следующий расчет:

"C3H12O4".gsub(/\d/, h)
  #=> "C12H48O16"
"99Ra$32".gsub(/\d/, h)
  #=> "3636Ra$128"

Используется форма String # gsub , в которой для подстановок используется га sh.

Вариант этого следующий.

"C3H12O4".gsub(/./) { |c| h.fetch(c, c) }
  #=> "C12H48O16"

Здесь gsub соответствует каждому символу, который он передает блоку, который должен храниться в переменной блока c. Hash # fetch затем используется для поиска и возврата h[c], при условии, что h имеет ключ c. Если h не имеет ключа c, возвращается второй аргумент fetch (c).

Использование ha sh избавляет от необходимости конвертировать туда и обратно между целыми числами и строками, за исключением случаев создания ha sh, конечно, но это делается только один раз.

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