代码之家  ›  专栏  ›  技术社区  ›  syzygy333

Codecademy“在符号和字符串之间转换”ruby课程

  •  9
  • syzygy333  · 技术社区  · 13 年前

    以下是Codecademy的说明:

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

    这是我写的代码( strings 提供了阵列):

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

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

    5 回复  |  直到 13 年前
        1
  •  16
  •   mahemoff    12 年前

    这个 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) ,用你觉得更有品味的。)

        2
  •  1
  •   Femaref    13 年前

    each 迭代 strings ,将块应用于每个元素。然而,它不会返回任何内容。您将要添加到 symbols 块本身中的数组:

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

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

    symbols = strings.map { |x| x.to_sym }
    
        3
  •  1
  •   Guilherme Franco    12 年前

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

    strings.each do |x|
    x = x.to_sym
    symbols.push(x)
    
        4
  •  0
  •   Rahul Deo    12 年前
    strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
    
    symbols = Array.new
    strings.each do |x|
        symbols.push(x.to_sym)
    end
    

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

        5
  •  0
  •   Kijana_kenn    10 年前

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

    strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
    symbols = []
    strings.each do |s|
      s = s.to_sym
      symbols.push(s)
    end