有没有一种简单的方法可以通过搜索他的名字从结构中获取数据?
我在考虑这样的结构:
test = struct('A', ...
[struct('Name','Adam','Data',[1 2 3]) ...
struct('Name','Eva','Data',[11 12 13])]);
Run Code Online (Sandbox Code Playgroud)
现在我想通过搜索'Adam'或'Eva'来访问Data字段.
这样的事情:
getStructDataByName(test,'Adam')
Run Code Online (Sandbox Code Playgroud)
有人知道一个脚本或有没有想法这样做而不需要太多努力?
编辑:
这是我目前的解决方案:
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
Run Code Online (Sandbox Code Playgroud)
我应该使用strcmp()还是ismember()?
试试这个:
test.A(strcmp({test.A.Name}, 'Eva')).Data
Run Code Online (Sandbox Code Playgroud)
基本上,如果你调用test.A.Name它将返回所有名称的逗号分隔列表.因此{},我们将所有这些连接到一个单元矩阵中.然后我们可以strcmp用来查找与您所追求的名称相匹配的索引.请注意,如果您的名字可以重复,那么这将返回一个以逗号分隔的列表,因此您可能希望在这种情况下将花括号括在整个表达式周围.