在涉及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()方法添加到我的类中?
答案 0 :(得分:2)
您可以将ID值(一般情况下的哈希值)分配给TestRigData
个对象,并将其存储为新属性。然后,您可以一次性将所有ID值提取到单元格数组例如 {yourarray.id}
(如果ID值是标量,则为[yourarray.id]
),允许您应用{{1}和find
轻松。
当然,添加自己的unique
和find
肯定是可能的,但为什么要让生活变得更难? ;)
答案 1 :(得分:0)
将此作为句柄类(而不是值类)创建的建议是我将来需要考虑的更多内容...在整理了一些初始代码后,返回并尝试更改{{1} } classdef TestRigData
似乎导致了构造函数的问题。
有点不清楚如何使用每个对象唯一的哈希值......但是将所有值提取到数组的语法最终是让我朝着正确的方向前进的。
获取符合特定属性值的原始大数据数组子集的新对象数组非常简单:
classdef TestRigData < handle
或只是指数...
newObjectArray = oldObjectArray([oldObjectArray.testTemperature]==200);
或者在非标量值的情况下,例如样本材料的字符串属性......
indicesOfInterest = find([oldObjectArray.testTemperature]==200);