删除数组中的双引号而不将数组转换为字符串

时间:2013-12-30 06:16:12

标签: ruby arrays double quotes

我有一个数组

  

x = [“1”,“2”,“3”,“:*”,“:+”,“4”,“5”,“: - ”,“:/”]

我正试图摆脱数组内部的双引号。

我知道我可以使用:

  

x.to_s.gsub('“','')

并输出一个字符串:

  

“[1,2,3,:*,:+,4,5,: - ,:/]”

我想要的输出是数组而不是字符串:

  

[1,2,3,:*,:+,4,5,: - ,:/]

有没有办法让我摆脱数组中每个元素的双引号,但仍然将我的数组保留为数组?

提前致谢!

3 个答案:

答案 0 :(得分:6)

eval x.to_s.gsub('"', '')
# => [1, 2, 3, :*, :+, 4, 5, :-, :/]

答案 1 :(得分:4)

以下是一种方法:

x=["1", "2", "3", ":*", ":+", "4", "5", ":-", ":/"]
=> ["1", "2", "3", ":*", ":+", "4", "5", ":-", ":/"]

x.map{|n|eval n}
=> [1, 2, 3, :*, :+, 4, 5, :-, :/]

重要提示:如果您接受来自不受信任来源(例如用户输入)的未过滤输入,则eval方法不安全。如果您正在制作自己的字符串数组,那么eval就可以了。

答案 2 :(得分:0)

x = ["1", "2", "3", ":*", ":+", "4", "5", ":-", ":/"]

x.map {|e| e[0] == ':' ? e[1..-1].to_sym : e.to_i}

x.map {|e| (e =~ /^\d+$/) ? e.to_i : e[1..-1].to_sym}

  # => [1, 2, 3, :*, :+, 4, 5, :-, :/] 

这当然仅在x的元素引用整数和符号时才有效(我更喜欢使用eval)。