Снятие скобок со струны - PullRequest
1 голос
/ 11 мая 2019
def encode(string)
    string.unpack("B*").to_s.gsub("1", "b").to_s.gsub("0", "a")
end

puts encode("Michael")

Вывод: ["abaabbababbabaababbaaabbabbabaaaabbaaaababbaabababbabbaa"]

Я устал от кучки вещей, чтобы снять скобки.Я знаю, что gsub будет работать, но это не выглядит так хорошо.Также я уверен, что есть лучший способ.Я устал использовать .shift без удачи.тоже устал .to_a.shift.Любая помощь будет оценена.

1 Ответ

4 голосов
/ 11 мая 2019

«Проблема» в том, что вы конвертируете массив в строку. В результате распаковки возвращается массив, и вы вызываете to_s, так что вы получите:

p "Michael".unpack("B*") # ["01001101011010010110001101101000011000010110010101101100"]
p "Michael".unpack("B*").to_s # "[\"01001101011010010110001101101000011000010110010101101100\"]"

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

"Michael".unpack("B*").first.gsub("1", "b").to_s.gsub("0", "a")
# "abaabbababbabaababbaaabbabbabaaaabbaaaababbaabababbabbaa"

Обратите внимание, что если вы просто заменяете 0 на a, а 1 на b, вы можете использовать tr:

p "Michael".unpack("B*").first.tr("01", "ab")
# "abaabbababbabaababbaaabbabbabaaaabbaaaababbaabababbabbaa"

Тот же результат.

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