我在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个。)
如何创建一个实际的数组呢?
欣赏任何指示,已经在这方面寻找一段时间无济于事。
答案 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"]