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