ルビーでは、私は持っています
res = [[0, :product, "client"], [0, :os, "windows"], [0, :architecture, "32rs"]]
OSの価値を知りたい。res [1] [2]でそれを行うことができますが、インデックスは変更される可能性があるため、インデックスに依存したくありません。私が持っているのはキー、つまり:osです。それで、それを見つける最良の方法は何ですか?
ルビーでは、私は持っています
res = [[0, :product, "client"], [0, :os, "windows"], [0, :architecture, "32rs"]]
OSの価値を知りたい。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"
hash = Hash[res.map{ |a| a[1..-1] }]
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]
第 2 レベルの配列の順序が変わることが懸念される場合は、次のようにデータをさらに深く再構築する必要があります。
res = { product: [ 0, "client" ], os: [ 0, "windows" ], architecture: [ 0, "32rs" ] ]
そして、そのように対処してください。