Codecademy "конвертирование между символами и строками" рубиновый урок

Это инструкции Codecademy:

У нас есть массив строк, которые мы хотели бы позже использовать в качестве ключей хеша, но мы бы предпочли, чтобы они были символами. Создайте новый массив символов. использование .each перебирать массив строк и преобразовывать каждую строку в символ, добавляя эти символы в символы.

Это код, который я написал (strings массив был предоставлен):

strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
symbols = []
strings.each { |x| x.to_sym }
symbols.push(strings)

Я знаю, что, вероятно, делаю несколько вещей неправильно, но я прошел через рубиновый трек так далеко без особых трудностей, поэтому я не уверен, почему этот озадачивает меня. Во-первых, это не преобразование строк в символы, а во-вторых, это не добавление их в массив символов.

5 ответов

Решение

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

strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
symbols = []
strings.each { |s| symbols.push s.to_sym }

Или более элегантно, вы можете пропустить настройку symbols = [] и просто использовать map создать его в одну строку:

symbols = strings.map { |s| s.to_sym }

map будет проходить через каждый элемент в массиве и преобразовывать его во что-то еще в соответствии с функцией карты. А для простых карт, где вы просто применяете функцию, вы можете сделать еще один шаг вперед:

symbols = strings.map &:to_sym

(Это так же, как symbols = strings.map(&:to_sym), используйте то, что вы найдете со вкусом.)

Вы можете изменить свой код на следующее:

strings.each do |x|
x = x.to_sym
symbols.push(x)

each перебирает strings, применить блок к каждому элементу. Однако, это ничего не возвращает. Вы хотите добавить в symbols массив в самом блоке:

strings.each { |x| symbols.push(x.to_sym) }

Однако вы также можете сгенерировать массив символов в одной строке:

symbols = strings.map { |x| x.to_sym }
strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]

symbols = Array.new
strings.each do |x|
    symbols.push(x.to_sym)
end

Это должен быть точный ответ..

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

strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
symbols = []
strings.each do |s|
  s = s.to_sym
  symbols.push(s)
end
Другие вопросы по тегам