Ruby将字符串格式化为多维数组,转换为实际的数组

时间:2014-09-12 15:37:19

标签: ruby multidimensional-array

我在Ruby中有一个字符串:

[[nil,nil,nil,nil,nil,nil,nil,nil,nil,'Average of','Transaction Amount','dataset_test_3.SampleData100'],[nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,'Country','dataset_test_3.SampleData100']]

它被完美地格式化为多维数组,并具有2个子数组。 (在某些情况下,它可能有3个。)

如何创建一个实际的数组呢?

欣赏任何指示,已经在这方面寻找一段时间无济于事。

2 个答案:

答案 0 :(得分:2)

您的问题的答案是eval()

您可以使用eval()将字符串评估为ruby中的“代码”。

例如,在您的情况下,如果您有一个名为input的字符串,其中包含一个数组声明:

b = eval(input)
b # => [[nil,nil,nil,'Average of',....]]

以下是来自RubyMonk的eval()的精彩介绍:

http://rubymonk.com/learning/books/5-metaprogramming-ruby-ascent/chapters/24-eval/lessons/63-eval

eval()之后,您可以在阵列上使用flatten,将其展平为一维。

因此,简而言之,eval(input).flatten可以完成这项工作。 :)(建议Nimir

值得注意的是,对于不受信任的数据,这可能是非常危险不要评估任意用户数据。 (tadman

答案 1 :(得分:2)

您还可以使用YAML将字符串解析为数组

require 'yaml'

array = YAML.load(input)
array.flatten 
# => ["nil", "nil", "nil", "nil", "nil", "nil", "nil", "nil", "nil", "Average of", "Transaction Amount", "dataset_test_3.SampleData100", "nil", "nil", "nil", "nil", "nil", "nil", "nil", "nil", "nil", "nil", "Country", "dataset_test_3.SampleData100"]