我有一个数组
x = [“1”,“2”,“3”,“:*”,“:+”,“4”,“5”,“: - ”,“:/”]
我正试图摆脱数组内部的双引号。
我知道我可以使用:
x.to_s.gsub('“','')
并输出一个字符串:
“[1,2,3,:*,:+,4,5,: - ,:/]”
我想要的输出是数组而不是字符串:
[1,2,3,:*,:+,4,5,: - ,:/]
有没有办法让我摆脱数组中每个元素的双引号,但仍然将我的数组保留为数组?
提前致谢!
答案 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
)。