用户定义的类对象数组中的“查找”和“唯一”(MATLAB)

时间:2013-09-01 13:30:48

标签: matlab oop

在涉及C#之后,我现在热衷于在Matlab中使用一些OOP - 到目前为止我还没有做过!

假设我为具有少量属性的数据对象定义了一个类......

classdef TestRigData
    properties
        testTemperature
        sampleNumber
        testStrainAmplitude
        sampleMaterial
        rawData
    end

    methods
        % Some constructors and data manipulation methods in here
    end
end

...其中'rawData'是m-by-n实际实验数据的数组,其他值是双精度或字符串,以帮助识别每个特定的实验。

如果我有一个TestRigData对象数组,那么找到符合特定条件的对象索引的最佳方法是什么(例如testTemperature == 200)?或获取属性的所有唯一值(例如,此集合中的所有唯一样本编号)。

如果它们是自己的数组,(myNewArray = [3 5 7 22 60 60 5])使用find()和unique()函数就足够了。是否有一个我可以从这里继承的类,它允许这样的东西在我的对象数组上工作?或者我是否必须将自己的find()和unique()方法添加到我的类中?

2 个答案:

答案 0 :(得分:2)

您可以将ID值(一般情况下的哈希值)分配给TestRigData个对象,并将其存储为新属性。然后,您可以一次性将所有ID值提取到单元格数组例如 {yourarray.id}(如果ID值是标量,则为[yourarray.id]),允许您应用{{1}和find轻松。

当然,添加自己的uniquefind肯定是可能的,但为什么要让生活变得更难? ;)

答案 1 :(得分:0)

将此作为句柄类(而不是值类)创建的建议是我将来需要考虑的更多内容...在整理了一些初始代码后,返回并尝试更改{{1} } classdef TestRigData似乎导致了构造函数的问题。

有点不清楚如何使用每个对象唯一的哈希值......但是将所有值提取到数组的语法最终是让我朝着正确的方向前进的。

获取符合特定属性值的原始大数据数组子集的新对象数组非常简单:

classdef TestRigData < handle

或只是指数...

newObjectArray = oldObjectArray([oldObjectArray.testTemperature]==200);

或者在非标量值的情况下,例如样本材料的字符串属性......

indicesOfInterest = find([oldObjectArray.testTemperature]==200);