2014-09-12 58 views
0

我有紅寶石的字符串:紅寶石轉換格式化爲多維數組串,到實際陣列

[[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

當提供的數據,請其降低到必要的最低限度重現您所看到的問題。除此之外的任何事情都是浪費我們的時間。你的問題聽起來像一個XY問題,你問Y的問題,當你應該問X.你是如何得到數組的字符串表示的?這是非常罕見的,通常是嘗試使用'inspect'輸出或捕獲'puts'類型輸出的結果。 – 2014-09-12 15:55:59

+0

如果你可以使用像JSON這樣的中性格式,你的生活會更容易。 – tadman 2014-09-12 16:29:52

回答

1

您還可以使用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"] 
+0

+1。接得好! – 2014-09-12 16:01:19

+0

+1比eval更安全 – Nimir 2014-09-12 16:10:58

+0

差不多!如果我這樣做,我的字符串中的零值仍然是字符串。我試圖用gsub讓它們成爲零,就像下面那樣,但是它給出了一個錯誤。 array.each do | s | s.gsub('\「nil \」',零) end – 2014-09-12 16:16:16

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

+0

我的字符串被命名爲「輸入」。如果我做input.flatten,我得到這個錯誤:未定義的方法'flatten'爲#<字符串:0x00000000fdceb0>(NoMethodError) – 2014-09-12 15:43:34

+0

我的壞...修復.. – kriskova 2014-09-12 15:45:07

+0

你不能'扁平'一個字符串。 – 2014-09-12 15:58:49