我有字符串str =“[123,345,567]”。我想将其转换为数组arr = [123,345,567]。怎么做?
答案 0 :(得分:22)
如果知道该字符串包含数组,则可以只使用eval
;
arr = eval(str)
如果您不确定,可以更多地参与删除括号,拆分,
并将数字收集到数组中;
arr = str[1..-2].split(',').collect! {|n| n.to_i}
here的演示。
答案 1 :(得分:4)
str = "[123, 345, 567]"
1) eval(str)
2) str = "[123, 345, 567]".scan( /\d+/ ) # Make the array
str.map!{ |s| s.to_i } # convert into integer
答案 2 :(得分:2)
最简单的事情就像arr = eval(str)
,但这不是很安全。另一种选择是执行arr = str.gsub(/\[|\]/,'').split(/,/).map(&:to_i)
之类的操作 - 从原始字符串中删除括号,在逗号上拆分,然后将生成的字符串片段转换为整数。
答案 3 :(得分:1)
对于Rails项目,我发现内置的ActiveSupport JSON解码器是一个很好的解决方案。只需将字符串包装在JSON中,对其进行解码,然后返回新数组:
def to_a(str)
wrapped_str = "{ \"wrapper\": #{str} }"
ActiveSupport::JSON.decode(wrapped_str)['wrapper'] rescue str
end
str = '[1, 2, [3, [4, 5, true, "a", {"test": "whee"}]]]'
str_to_a = to_a(str)
只要字符串是有效的JSON,这将返回一个数组。如果解码失败,将返回原始字符串。请注意,在这种情况下,有效的JSON仅适用于数组的内容 - 如果字符串数组包含任何哈希值(此处有警告),则所有哈希键必须包含在 double 强>报价。另请注意,如果布尔值不是用引号括起来,那么布尔值只会被转换为布尔值。
在解码失败时返回原始字符串只允许在成功的地方转换字符串(保持其他字符串不变)。或者,您可以使用rescue []
强制将所有内容强制转换为数组(或空数组)。