2016-08-27 81 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))