如何将字符串转换为数组

时间:2012-04-03 11:09:39

标签: ruby-on-rails-3.1

我有字符串str =“[123,345,567]”。我想将其转换为数组arr = [123,345,567]。怎么做?

4 个答案:

答案 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 []强制将所有内容强制转换为数组(或空数组)。