【问题标题】:Check if combination of field values exists in a MATLAB cell array of structs检查结构体的 MATLAB 元胞数组中是否存在字段值的组合
【发布时间】:2018-09-30 17:32:47
【问题描述】:

假设我有一个包含结构的元胞数组,每个结构有 3 个字段。

当我遇到一个新结构时,我想检查其 3 个字段中的 2 个字段的值是否与数组中任何结构元素的值匹配。

cell_array = cell(4,1)
cell_array{1}.Field1 = "ABC"
cell_array{1}.Field2 = 46
cell_array{1}.Field3 = 1648

% Would like to check if fields 1 and 2 match 
% any struct in cell_array
new_struct.Field1 = "ABC"
new_struct.Field2 = 46
new_struct.field3 = 1765

谢谢。

【问题讨论】:

  • 如果您的结构都包含相同的字段,您应该考虑使用结构数组而不是标量结构的元胞数组。然后索引为s(1).Field1。这更节省内存,更不容易出错,并且更容易使用。

标签: matlab


【解决方案1】:

你应该使用 Matlab 的intersect 命令。它在任何类型的两个列表之间找到相似之处并返回这些相似之处。

那么应该很简单:

cell_array = {'ABC', '46', '1648'};

new_array = {'ABC', '46', '1765'};
[C,~,~] = intersect(cell_array,new_array)

disp(C) % C = {'ABC'} {'46'}; 2x1 cell array

% Then simply checking the length of C
if length(C) >= 2
   % Perform your task
end 

【讨论】:

  • 当我尝试运行 intersect 调用时出现错误,“类单元格的输入 A 和类结构的输入 B 必须是字符向量的单元格数组,除非一个是字符向量。 "上面表达的元胞数组的内容有问题吗?
  • 我更新了元胞数组的声明方式。 :=) 不幸的是,我无法从这里访问 Matlab,但这应该可以工作。
  • 感谢您的反馈。只要单元格包含字符串,更新的代码就可以工作。我面临的挑战是我的单元格数组的每个元素都是一个结构,而不是一个字符串。在这些结构内部是字符串和数字字段。这是我需要检查的那些字段。
  • 啊,我明白了。我有点误解了这个问题。在这种情况下,我将使用 for 循环遍历每个结构的元素,然后使用 isequal() 方法来评估每对元素。我可以稍后更新我的答案来做到这一点。
猜你喜欢
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
相关资源
最近更新 更多