2016-08-27 4 views
1

私はGoodとMarketという2つのクラスを持っています。すべてのクラスにはそのプロパティがあります。私はこの方法が買う呼び出すmatlabの配列にオブジェクトが現れる回数を数えます。

classdef good 
properties 
    name 
    price1 
    price2 
    quantity 
end 
methods 
    function obj=good(val1,val2,val3) 
    obj.name=val1; 
    obj.price1=val2; 
    obj.price2=val3; 
    end 
end 
end 

毎回

グッド

classdef market< handle 
properties 
    name 
    goods=good.empty 
    budget=0 
end 
methods 
    function obj=market(val1) 
     obj.name=val1; 
    end 
    function buy(obj, item) 
     obj.goods(end+1)=item; 
    end 
    function sell(obj,item,quantity) 
     obj.goods=obj.goods(obj.goods~=item); 
    end 
    function list=l(obj) 
     list={obj.goods.name;obj.goods.price1;obj.goods.price2}; 
    end 
    end 

終わりを次のように彼らは、新しいアイテムは市場で私の商品に追加されます。私は2品、good1 ANG good2を持っている場合たとえば、9回は、それらを購入した後、私は9

'Cheese' 'Eggs' 'Eggs' 
[ 10] [ 20] [ 20] 
[ 20] [ 30] [ 30] 

チーズを通じて次のような結果に

列1

'Cheese' 'Eggs' 'Cheese' 'Cheese' 'Cheese' 'Cheese' 
[ 10] [ 20] [ 10] [ 10] [ 10] [ 10] 
[ 20] [ 30] [ 20] [ 20] [ 20] [ 20] 

〜6列7を持っていますgood1に対応する。卵はgood2に対応しています。

  1. どのように私が持っているすべてのgood1とgood2を合計することができますか?関数numel(good1)はans = 1を返します。これは間違っています。
  2. 私は自分の財産を持っています。結果を合計した後、どのようにして商品の別の配列を対応する数量にすることができますか?

答えて

1

オブジェクト配列のフィールドにアクセスした結果はcomma-separated listです。その理由はnumelはあなたが想定どおりに動作しません。配列を受信するには、中括弧または括弧でリストを囲む必要があります。

names={m.goods.name} 
prices1=[m.goods.price1] 

は今namesnamemのすべてのフィールドを含むセル配列、である、prices1はフィールドprice1が含まれています。​​を含む、要素を見つけるために、我々は今strcmpを使用することができます。

e= strcmp(names,'Eggs') 

​​フィールドの数がe中のものの数です。

eggs_num= sum(e) 

そして今、我々は、我々が発見した要素のprice1分野まとめることができます:

sum(prices1(e)) 
それらを数えることができます
関連する問題