根据字段值查找结构的元素

时间:2016-06-21 00:05:02

标签: arrays matlab structure matlab-struct

我有一个包含大量字段的1x10结构数组,我想从struct数组中删除一个字段变量上具有特定值的元素。 我知道我正在寻找的值和我应该寻找的字段,我也知道如何在找到它后从struct数组中删除该元素。问题是如何(如果可能的话)优雅地识别它而不经过强力解决方案,即通过结构数组的元素的for循环与我正在寻找的值进行比较。 示例代码:买方为1x10结构数组,包含字段: ID,N,预算 以及在id值中找到的变量,如id_test = 12

1 个答案:

答案 0 :(得分:2)

您可以使用以下事实:如果您有struct的数组,并且使用点引用,则会创建comma-separated list。如果将其括在[]中,它将尝试创建一个数组,如果将其括在{}中,它将被强制转换为单元格数组。

a(1).value = 1;
a(2).value = 2;
a(3).value = 3;

% Into an array
[a.value]

%   1   2   3

% Into a cell array
{a.value}

%   [1]     [2]     [3]

因此,为了进行比较,您可以将您关心的字段转换为单元格数组,以进行比较。然后,此比较将生成一个逻辑数组,您可以使用该数组索引原始结构。

例如

% Some example data
s = struct('id', {1, 2, 3}, 'n', {'a', 'b', 'c'}, 'Budget', {100, 200, 300});

% Remove all entries with id == 2
s = s([s.id] ~= 2);

% Remove entries that have an id of 2 or 3
s = s(~ismember([s.id], [2 3]));

% Find ones with an `n` of 'a' (uses a cell array since it's strings)
s = s(ismember({s.id}, 'a'));