2017-05-09 20 views
0

配列内の特定の値にアクセスしようとしています。配列は、特定のクラスのインスタンス変数が含まれており、以下のとおりである:標準:私は、アレイ内の各配列を反復処理すると、アレイ内の配達のは、多くは@typeを持っているかを知りたい配列内のインスタンス変数へのアクセス

[[#<Supermarket:0x007f8e989daef8 @id=1, @name="Easybuy">, 
    #<Delivery:0x007f8e989f98a8 @type=:standard, @price=5.0>], 
[#<Supermarket:0x007f8e99039f88 @id=2, @name="Walmart">, 
    #<Delivery:0x007f8e989f98a8 @type=:standard, @price=5.0>], 
[#<Supermarket:0x007f8e9901a390 @id=3, @name="Forragers">, 
    #<Delivery:0x007f8e989eae20 @type=:express, @price=10.0>]] 

。これは可能ですか?事前にありがとう

+1

「スーパーマーケット」クラスと「配送」クラスにはどのようなメソッドがありますか?誰かのインスタンス変数を突き止めることは、一般的には悪い考えであり、やや失礼です。 –

+0

なぜあなたは、互いに素の型の配列を持っていますか? 「スーパーマーケット」にも「タイプ」がありますか? –

答えて

0
array_of_array.inject(0) do |sum, array| 
    sum + array.count { |el| el.class == Delivery && el.instance_variable_get(:@type) == :standard } 
end 
0

select()を使用すると、配列の要素をフィルタリングできます。 select()を持つ配列をフィルタリング

require 'ostruct' 
require 'pp' 

supermarket_data = [ 
    ['Easybuy', 1], 
    ['Walmart', 2], 
    ['Forragers', 3], 
] 

supermarkets = supermarket_data.map do |(name, id)| 
    supermarket = OpenStruct.new 
    supermarket.name = name 
    supermarket.id = id 
    supermarket 
end 

delivery_data = [ 
    ['standard', 5.0], 
    ['standard', 5.0], 
    ['express', 10.0], 
] 

deliveries = delivery_data.map do |(type, price)| 
    delivery = OpenStruct.new 
    delivery.type = type 
    delivery.price = price 
    delivery 
end 

combined = supermarkets.zip deliveries 
pp combined 

[[#<OpenStruct name="Easybuy", id=1>, 
    #<OpenStruct type="standard", price=5.0>], 
[#<OpenStruct name="Walmart", id=2>, 
    #<OpenStruct type="standard", price=5.0>], 
[#<OpenStruct name="Forragers", id=3>, 
    #<OpenStruct type="express", price=10.0>]] 

あなたのデータを再構築

standard_deliveries = combined.select do |(supermarket, delivery)| 
    delivery.type == 'standard' 
end 

pp standard_deliveries # pretty print 
p standard_deliveries.count 

[[#<OpenStruct name="Easybuy", id=1>, 
    #<OpenStruct type="standard", price=5.0>], 
[#<OpenStruct name="Walmart", id=2>, 
    #<OpenStruct type="standard", price=5.0>]] 

2 
関連する問題