2011-05-18 60 views
0

值,如果我做錯了這裏,我想知道。不需要額外的(」「)中的散列關於Ruby 1.9.2

這裏是我剛剛從1.8.6

def prepares_data(hash_nodes) 
    @array_of_node = Array.new 
    hash_nodes.each do | node | 
     nodeId = node.values_at('self')[0].split('/').last 
     text = node.values_at('data')[0].values_at('name') 
     puts text 
     @array_of_node << { :nodeId => nodeId, :text => text } 
    end 
    puts @array_of_node 
    return @array_of_node 
    end 

升級所以基本上紅寶石1.9.2代碼,代碼只是一堆ADDA數組散列這是所有罰款。當我打印在循環中文字我也得到明文結果

 
What allergies do you have? 
What dont you like? 
What is your specific diet? 

然而,當我打印出來@array_of_node我得到這個

 
{:nodeId=>"7", :text=>["What allergies do you have?"]} 
{:nodeId=>"8", :text=>["What dont you like?"]} 
{:nodeId=>"9", :text=>["What is your specific diet?"]} 

在文本我有多餘的[「...」 ]我不想要。我如何擺脫這一點,我真的不明白這一部分,因爲這個代碼在Ruby 1.8.7中工作正常。我在這裏做錯了什麼?

太謝謝你了。

+0

是在你的代碼行「@array_of_node節點ID,:文本=>文本}」吧? – 2011-05-18 11:32:59

+0

對不起應當@array_of_node << {:節點ID =>節點ID,:文本=>文本} – toy 2011-05-18 11:33:32

+0

這是正確的,但在這篇文章中不正確顯示。 – toy 2011-05-18 11:34:11

回答

0

的values_at方法返回一個數組,所以我想這就是爲什麼它的發生。嘗試傳遞一個鍵,而不是像這樣:

text = node.values_at('data')[0]['name'] 
+0

它的工作原理。非常感謝。 – toy 2011-05-18 11:57:39

+0

注意在1.8和1.9之間的Array.to_s差異! 1.8用來做一個self.join,同時有1.9個別名to_s來檢查,所以它輸出的數組包括引號和方括號。依靠to_s方法獲取數組的String輸出並不乾淨。所以切換到1.9可以幫助您找到陣列的不潔用途。 去過有作爲;)。 – wrtsprt 2011-05-18 14:24:09