按名称获取结构数据(Matlab)

Pha*_*hab 0 matlab struct

有没有一种简单的方法可以通过搜索他的名字从结构中获取数据?

我在考虑这样的结构:

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()?

Dan*_*Dan 5

试试这个:

test.A(strcmp({test.A.Name}, 'Eva')).Data
Run Code Online (Sandbox Code Playgroud)

基本上,如果你调用test.A.Name它将返回所有名称的逗号分隔列表.因此{},我们将所有这些连接到一个单元矩阵中.然后我们可以strcmp用来查找与您所追求的名称相匹配的索引.请注意,如果您的名字可以重复,那么这将返回一个以逗号分隔的列表,因此您可能希望在这种情况下将花括号括在整个表达式周围.

  • 我在我的代码中添加了一个tic/toc并发现,ismember()比strcmp()需要更长的时间. (3认同)