当A和B是单元格数组时,如何在Matlab中进行A == B调用成员(A,B)

时间:2015-11-27 04:47:12

标签: matlab

这是一些数据。

A = {'asdf' 'qwer'};

当我使用==时,我得到了

>> A == 'asdf'
Undefined operator '==' for input arguments of type 'cell'.

这是预料之中的。解决方法是

>> ismember(A, 'asdf')

ans =

     1     0

如何为单元格类添加方法,以便==默认以上述方式调用ismember

2 个答案:

答案 0 :(得分:2)

您可以按照in this answer

的说明为单元格数组重载@eq

为什么这是一个坏主意? ismember仅在单元格数组中有字符串时才有效,但不适用于其他数据类型。此外,它将使您的代码不可移植,例如,我不想使用为内置数据类型重载运算符的代码。

如果您真的想拥有类似于单元格数据的数据类型,可以将@eq用作ismember,则可以创建子类{{1}的自定义类myCellArray并保证每个元素都包含一个字符串。然后,您可以根据需要重载运算符。

答案 1 :(得分:1)

如果要测试字符串'asdf'是否在单元格数组{'asdf','qwer'}中,则应该使用ismember函数:

my_set = {'asdf','qwer'};
logical_result = ismember('asdf',my_set);

执行您的建议时,存在主要的风格问题:

  1. 以不反身的方式定义运算符==(即A==A返回false)且不对称(A==B与{{B==A不同1}})奇怪。
  2. 您的代码将无法移植,因为它会要求人们破解他们的def。细胞阵列工作。几乎没有人会愿意这样做。
  3. 更改单元格数组的代码可能会引起混乱的错误。
  4. 或者,花费时间和精力编写自己的单元格数组包装/替换类是可能的,但这会浪费时间并且不必要地慢。