Манипулирование символами в рубине - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь взять массив символов,

a = [:apple, :banana ,:grape, :black]

и добавить строку в конце каждого символа в зависимости от последней буквы.Если символ заканчивается на e, добавьте "hello", в противном случае "hi".Я хочу получить:

[:applehello, :bananahi]

Я сделал:

n = []
a.each do |b|
  if (b[-1] == "e")
    n.push b.to_s + "hello"
  else
    n.push b.to_s + "hi"
  end
end
p n

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

Сделано ли это с помощью sub aswell-

a.each do |q|


if (q[-1]=="e")
    then n.push q.to_s.sub(/e/,"ehello")
  else
    n.push q.to_s.sub(/\z/,"ahi")
  end
end

p n

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018
a.map{|sym| sym.to_s.sub(/.\z/) do
  |c| case c; when "e" then "hello"; else "hi" end.to_sym
end}
# => [:applhello, :bananhi, :graphello, :blachi]
0 голосов
/ 10 декабря 2018

Пробовал со следующим,

a.map { |x| "#{x}#{x.to_s.last == 'e' ? 'hello' : 'hi'}".to_sym }
# => [:applehello, :bananahi, :grapehello, :blackhi]
0 голосов
/ 09 декабря 2018

Используйте to_sym для возврата символа

a = [:apple, :banana , :grape, :black]
a.map do |s|
  (s.to_s + (s[-1] == 'e' ? 'hello' : 'hi')).to_sym
end

Альтернатива

a = [:apple, :banana , :grape, :black]
a.map do |s|
  "#{s}#{s[-1] == 'e' ? 'hello' : 'hi'}".to_sym
end
...