有没有一种简单的方法可以通过搜索他的名字从结构中获取数据?
我正在考虑这样的结构:
test = struct('A', ...
[struct('Name','Adam','Data',[1 2 3]) ...
struct('Name','Eva','Data',[11 12 13])]);
现在我想通过搜索' Adam'来访问数据字段。或者'伊娃'。
类似的东西:
getStructDataByName(test,'Adam')
有人知道一个脚本或有没有想法这样做而不需要太多努力?
修改
这是我目前的解决方案:
function getDataByName(struct,fieldname)
names = getAllDataNames(struct);
thisIdx = strcmp(names,fieldname);
% or
% thisIdx = ismember(names,fieldname);
struct.A(thisIdx).Data
end
function names = getAllDataNames(struct)
for idx = 1:length(struct.A)
names(idx,:) = {struct.A(idx).Name};
end
end
我应该使用strcmp()还是ismember()?
答案 0 :(得分:5)
试试这个:
test.A(strcmp({test.A.Name}, 'Eva')).Data
基本上,如果你打电话给test.A.Name
,它将返回所有名字的逗号分隔列表。因此,通过将{}
置于其周围,我们将所有这些连接到单元矩阵中。然后,我们可以使用strcmp
查找与您之后的名称相匹配的索引。请注意,如果您的名字可以重复,那么这将返回一个以逗号分隔的列表,因此您可能希望在这种情况下将大括号括在整个表达式周围。