2016-08-27 156 views
1

我有兩個類Good and Market。每個班級都有其特性。它們如下計算對象在matlab中出現在數組中的次數

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 

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 

每次我調用該方法購買,一個新的項目被添加到我的貨在市場上。例如,如果我有2個產品,good1昂good2,9次在購買後,我要通過9

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

奶酪以下結果

列1至6

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

列7相對好1。雞蛋對應於good2。

  1. 我該如何總結所有good1以及我擁有的所有good2?函數numel(good1)返回ans = 1,這是錯誤的。
  2. 我在我的貨物中有一個物業數量。在總結結果後,我怎樣才能得到另一批我的產品和相應的數量?

回答

1

訪問對象數組的字段的結果是comma-separated list。這就是爲什麼numel不能如你所想的那樣工作。要接收一個數組,你應該附上名單在大括號或括號:

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

現在names是單元陣列,包含namem所有字段,prices1包含字段price1。爲了找到的元素,包含​​,我們現在可以使用strcmp

e= strcmp(names,'Eggs') 

​​場數是那些在e數量。讓我們數數看:

eggs_num= sum(e) 

現在我們可以總結元素的price1領域,我們已經發現:

sum(prices1(e))