2

ルビーでは、私は持っています

res = [[0, :product, "client"], [0, :os, "windows"], [0, :architecture, "32rs"]]

OSの価値を知りたい。res [1] [2]でそれを行うことができますが、インデックスは変更される可能性があるため、インデックスに依存したくありません。私が持っているのはキー、つまり:osです。それで、それを見つける最良の方法は何ですか?

4

3 に答える 3

5

データの構造を変更できないと仮定すると、次のようなことができます。

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"
于 2012-10-12T19:43:16.650 に答える
4
hash = Hash[res.map{ |a| a[1..-1] }]
hash[:os] # windows
于 2012-10-12T19:48:49.860 に答える
0

@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]

第 2 レベルの配列の順序が変わることが懸念される場合は、次のようにデータをさらに深く再構築する必要があります。

res = { product: [ 0, "client" ], os: [ 0, "windows" ], architecture: [ 0, "32rs" ] ]

そして、そのように対処してください。

于 2012-10-12T19:59:59.550 に答える