2011-11-21 105 views
-4

的第一個鍵我有一個數組,像這樣:紅寶石:重命名陣列

[ 
    [0] { 
     "Success" => true 
    }, 
    [1] { 
     "Success" => true 
    }, 
    [2] { 
     "Success" => true 
    }, 
    [3] { 
     "Success" => true 
    } 
] 

上述每個數字都有一個與之關聯的更大的多維數組,但不是目前我的關心。我想用新的鍵值重命名數字[0..3]。

因此,它看起來像這樣

[ 
    ["pop"] { 
     "Success" => true 
    }, 
    ["rock"] { 
     "Success" => true 
    }, 
    ["country"] { 
     "Success" => true 
    }, 
    ["soul/r&b"] { 
     "Success" => true 
    } 
] 

提前感謝!

+0

不知道如何做到這一點的紅寶石,但你的「陣列」實際上是一個JSON對象,因此,如果您搜索幫助在Ruby中更名JSON值可能會有所幫助。 –

+2

**你的輸入不是一個Ruby數組!**你發佈了錯誤的輸入,還是你想修改一個JSON對象? – Tilo

+0

對不起。輸出是一個JSON對象。我的解釋沒有了。我試圖重命名JSON對象鍵 – dennismonsewicz

回答

1

,如果您的輸入是真的JSON,你需要先解析JSON並將其轉換成一個Ruby數據結構:

require 'active_support' 

json = "[[0,{\"Success\":true}],[1,{\"Success\":true}],[2,{\"Success\":true}],[3,{\"Success\":true}]]" 

array = ActiveSupport::JSON.decode(json) 
=> [ [0, { "Success" => true }], [1, { "Success" => true }], [2, { "Success" => true }], [3, { "Success" => true }] ] 

現在你的輸入是一個Ruby數組...

我承擔你必須存儲在數組中的某處這樣的新的鍵:

new_keys = %w{pop rock country soul/r&b} 
=> ["pop", "rock", "country", "soul/r&b"] 

下一步是用新密鑰取代每個JSON陣列中的子陣列的第一個元素:

result = Array.new 
array.each do |value| 
    i, rest = value 
    result << [ new_keys[i], rest ] 
end 

json = result.to_json 

    => "[[\"pop\",{\"Success\":true}], 
     [\"rock\",{\"Success\":true}], 
     [\"country\",{\"Success\":true}], 
     [\"soul/r&b\",{\"Success\":true}]]" 
+0

非常感謝您的幫助! – dennismonsewicz

0

有兩個陣列象紅寶石的數據結構:其中存儲由有序的整數索引和散列,這是一個HashMap存儲數據由一些主要對象的可訪問可訪問的數據的陣列(例如一個字符串)。儘管它們都是以相似的方式訪問,但它們是不同的類。

從你的代碼(這是不正確的Ruby BTW)。我猜你有以下數據結構:

array = [ 
    { "Success" => true }, 
    { "Success" => true }, 
    { "Success" => true }, 
    { "Success" => true } 
] 

它可以轉移usiong下面的代碼:

keys = ["pop", "rock", "country", "soul/r&b"] 
result = {} 
keys.each_with_index {|key, i| result[index] = array[i]} 

這導致以下數據結構。它是一個包含原始數組元素(散列自己)作爲值的散列。

{ 
    "pop" =>  { "Success" => true }, 
    "rock" =>  { "Success" => true }, 
    "country" => { "Success" => true }, 
    "soul/r&b" => { "Success" => true } 
} 
+0

非常感謝您的幫助。我能夠使用你和@Tilo建議的內容。 – dennismonsewicz

0
styles = {0: "pop", 1: "rock", 2: "country", 3: "shoul/r&b"} 
info2 = Hash[info.map { |index, h| [[styles[index]], h}] 
+0

不幸的是輸入不是哈希 – 2011-11-21 20:34:40

+0

@UnixGuy:好吧,我們必須假設,OP說「數組」,而他顯示的東西看起來像是數組和哈希的混合。無論如何,把它改變成任何輸入/輸出類型都是微不足道的。 – tokland