獲取價值在Ruby中,我有紅寶石
res = [[0, :product, "client"], [0, :os, "windows"], [0, :architecture, "32rs"]]
我想操作系統的價值。我可以通過res [1] [2]來完成,但我不想依賴索引,因爲它可以改變。我擁有的關鍵是:os,那麼找到它的最好方法是什麼?
獲取價值在Ruby中,我有紅寶石
res = [[0, :product, "client"], [0, :os, "windows"], [0, :architecture, "32rs"]]
我想操作系統的價值。我可以通過res [1] [2]來完成,但我不想依賴索引,因爲它可以改變。我擁有的關鍵是:os,那麼找到它的最好方法是什麼?
假如你不能改變的數據結構的方式,你可以做這樣的事情:
res.select{|h| h.include?(:os)}.map(&:last)
但在我看來,你的數據更好地與哈希表示。
res_hash = res.each_with_object({}) do |value, memo|
memo[value[1]] = value[2]
end
# => {:product=>"client", :os=>"windows", :architecture=>"32rs"}
然後你就可以訪問離散數據的屬性是這樣的:
res_hash[:os]
# => "windows"
雖然@pje回答的假設下,你不能改變的數據,我將闡述他的建議有點在散列中構造數據:
res = [ [0, product: "client"],
[0, os: "windows"],
[0, architecture: "32rs"] ]
逗號存在和冒號位置的微小變化會導致Ruby編譯器解析[]表達爲對於其最後一個元素的哈希:
[ [0, {product: "client}], [0, {os: "windows"}], [0, architecture: "32rs"] ]
然後你就可以解決你所需要的舒適爲
res[1][1][:os]
如果您關心的是第二級陣列的順序會改變,你應該重組數據更深,如:
res = { product: [ 0, "client" ], os: [ 0, "windows" ], architecture: [ 0, "32rs" ] ]
並解決它的方式。
感謝鮑里斯,從來不知道冒號和逗號的變化可以做出這種改變。很高興今天學到新東西:) – JVK
這是一個很不完善的文件。 –
如果你不想依賴數組索引,那麼這個數據應該是真正的哈希結構。 – pje