我有一个数组
X = [ “1”, “2”, “3”, “:*”, “:+”, “4”, “5”, “ - ”, “:/”]
我试图摆脱双引号的阵列内。
我知道我可以使用:
x.to_s.gsub( '“', '')
并且它会输出一个字符串:
“[1,2,3,:*,:+,4,5, - ,:/]”
所期望的输出我想是一个数组不是字符串:
[1,2,3,:*,:+,4,5, - ,:/]
有没有办法让我摆脱了双引号的阵列中的每个元素,但仍留下我的数组作为一个数组?
提前致谢!
我有一个数组
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
)。