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

时间:2014-06-11 09:04:45

标签: matlab struct

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

我正在考虑这样的结构:

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

1 个答案:

答案 0 :(得分:5)

试试这个:

test.A(strcmp({test.A.Name}, 'Eva')).Data

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