这是来自Codecademy课程,我知道人们已经在这里询问过这个问题,但我想知道我的解决方案有什么问题。以下是他们开始使用的内容:
strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
# Add your code below!
以下是说明:
我们有一系列字符串,我们希望稍后将其用作哈希键,但我们更确切地说它们是符号。
创建一个新变量,符号,并在其中存储一个空数组。使用 .each迭代字符串数组。对于字符串中的每个s,请使用 .to_sym将s转换为符号并使用.push添加该新符号 符号。
我道歉,格式化并没有完全复制,但你明白了。
这是我的解决方案:
strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
# Add your code below!
symbols = []
strings.each do |s|
s.to_sym
symbols.push(s)
end
提交后,我收到的错误是我没有正确地将字符串转换为符号。
答案 0 :(得分:4)
您可以从指向的字符串创建一个新符号,但不要更改s(它仍然是一个字符串),并且不使用新符号。相反,你的循环应该包含代码
symbols.push(s.to_sym)
请注意,这个问题要求你使用.each,所以答案暗示.map是错误的,即使这是实现同样事情的更好方法。
答案 1 :(得分:0)
您可以将其映射并将其存储到新变量中,如说明所示:
symbols = strings.map{ |str| str.to_sym }
编辑:
s.to_sym
会返回一个符号,但您不会将其存储在任何位置或保存更改,因此这是一种非破坏性的方法。相反,您应该在返回的语句中push
,因此您使用s.to_sym
作为推入新数组symbols
的参数。当调用symbols
数组时,它现在应该包含所有先前转换为符号的字符串。
strings.each {|s| symbols.push(s.to_sym) }
答案 2 :(得分:0)
s.to_sym
会将其转换为符号,但s
仍为字符串。您没有将其再次分配给s
或s = s.to_sym
s.to_sym!
。所以你基本上推了s
字符串而不是符号。
答案 3 :(得分:0)
strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
symbols=[]
strings.each do |word|
word.downcase!
if word.include? "s"
symbols.push("s".to_sym)
end
end
print symbols