根据字段值查找结构的元素
Finding an element of a structure based on a field value
我有一个包含大量字段的 1x10 结构数组,我想从结构数组中删除其中一个字段变量具有特定值的元素。
我知道我正在寻找的值和我应该寻找的字段,我也知道如何在找到元素后从结构数组中删除它。问题是如何(如果可能的话)优雅地识别它而不通过蛮力解决方案,即通过结构数组的元素与我正在寻找的值进行比较的 for 循环。
示例代码:买家为 1x10 结构数组,字段为:
id,n,预算
以及要在 id 值中查找的变量,例如 id_test = 12
您可以使用这样一个事实,即如果您有一个 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'));
我有一个包含大量字段的 1x10 结构数组,我想从结构数组中删除其中一个字段变量具有特定值的元素。 我知道我正在寻找的值和我应该寻找的字段,我也知道如何在找到元素后从结构数组中删除它。问题是如何(如果可能的话)优雅地识别它而不通过蛮力解决方案,即通过结构数组的元素与我正在寻找的值进行比较的 for 循环。 示例代码:买家为 1x10 结构数组,字段为: id,n,预算 以及要在 id 值中查找的变量,例如 id_test = 12
您可以使用这样一个事实,即如果您有一个 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'));