9

这些是 Codecademy 的说明:

我们有一个字符串数组,我们希望稍后将其用作哈希键,但我们希望它们是符号。创建一个新数组,符号。用于.each迭代字符串数组并将每个字符串转换为符号,将这些符号添加到符号中。

这是我写的代码(strings提供了数组):

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

我知道我可能做错了很多事情,但是到目前为止,我已经轻松地完成了 ruby​​ 轨道,所以我不确定为什么这个会难倒我。首先,它没有将字符串转换为符号,其次,它没有将它们推送到符号数组。

4

5 回答 5

16

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将遍历数组中的每个项目并根据 map 函数将其转换为其他内容。对于您只是应用函数的简单地图,您可以更进一步:

symbols = strings.map &:to_sym

(和 一样symbols = strings.map(&:to_sym),用你觉得更有品位的那个。)

于 2013-04-12T12:27:42.277 回答
1

each迭代strings,将块应用于每个元素。但是,它不会返回任何东西。您需要添加到symbols块本身的数组中:

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

但是,您也可以在一行中生成符号数组:

symbols = strings.map { |x| x.to_sym }
于 2013-04-12T12:27:35.983 回答
1

您可以将代码更改为以下内容:

strings.each do |x|
x = x.to_sym
symbols.push(x)
于 2014-03-13T09:53:57.513 回答
0
strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]

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

这应该是一个确切的答案..

于 2014-01-20T07:02:33.237 回答
0

您必须在迭代字符串的每个值时存储新值,将其转换为符号,然后重新调整值

strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
symbols = []
strings.each do |s|
  s = s.to_sym
  symbols.push(s)
end
于 2016-06-22T08:02:29.303 回答