2012-05-17 45 views
1

我對Ruby非常陌生,而且一般編程。首先,我有以下代碼:字符串中的數組條目不映射到散列

hashy = {"a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 6, "f" => 6} 
array = ["a", "b", "c"] 
string = "df" 
array.push (string.split(//)) 
puts array 
test = array.map {|a| hashy.select {|k,v| a == k}} 

puts test 

此代碼成功地映射「一個」,「b」和「c」來的散列,並填充與來自散列的鍵和值試驗。

這總是適用於預定義的數組。然而,如果我從一個字符串(在這種情況下字符串「df」),或從字符串創建一個數組添加到數組,它不再將數組值映射到哈希,我看不出爲什麼。看着填充帶有字符串值的數組的方式不同,但每次得到了同樣的問題。

據我所看到的「東風」,也應該是映射到哈希。

任何幫助將是不勝感激。

回答

4

這是因爲你推string.split(//)陣列array作爲一個對象,所以你必須在array作爲結果的數字中的一個數組元素。

array = ["a", "b", "c"] 
string = "df" 
array.push (string.split(//)) 
=> ["a", "b", "c", ["d", "f"]] 

爲了避免這種情況,則可以使用陣列串聯,例如

array = ["a", "b", "c"] 
string = "df" 
array += string.split(//) 
=> ["a", "b", "c", "d", "f"] 
+0

,或者'[ 「一」, 「B」, 「C」,[ 「d」, 「F」]] .flatten' – DGM

+0

@DGM:或簡單地'array + string.split(//)' – tokland

+0

當然,謝謝,只是與作者的代碼類比。 – Flexoid