删除数组中的双引号,而不将数组转换为字符串
我有一个arrays
x = [“1”,“2”,“3”,“:*”,“:+”,“4”,“5”,“: – ”,“:/”]
我正试图摆脱数组内部的双引号。
我知道我可以使用:
x.to_s.gsub( ‘“’, ”)
它会输出一个字符串:
“[1,2,3,:*,:+,4,5,: – ,:/]”
我想要的输出是一个数组而不是一个字符串:
[1,2,3,:*,:+,4,5,: – ,:/]
有没有办法让我摆脱数组的每个元素的双引号但仍然将我的数组作为数组?
提前致谢!
eval x.to_s.gsub('"', '') # => [1, 2, 3, :*, :+, 4, 5, :-, :/]
这是你可以做到的一种方法:
x=["1", "2", "3", ":*", ":+", "4", "5", ":-", ":/"] => ["1", "2", "3", ":*", ":+", "4", "5", ":-", ":/"] x.map{|n|eval n} => [1, 2, 3, :*, :+, 4, 5, :-, :/]
重要提示:如果您接受来自不受信任来源的未过滤输入(例如用户输入),则eval
方法是不安全的。 如果你正在制作自己的字符串数组,那么eval
就可以了。
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
)。