有一个MATLAB函数,可以检查字段是否存在于一个MATLAB结构?
2417(30天)
显示旧的评论
“存在”函数返回true,如果存在一个结构与一个特定的名称。“isfield”函数返回true,如果一个字段是在一个结构数组中。然而,我想一个函数,用来决定字段是否存在任何结构的结构。例如,在下面的代码中,“isfield”函数不确定,“c”是一个“a”。
a.b。c = 1;
isfield (,“c”)
结果:
ans =
0
接受的答案
MathWorks支金宝app持团队
2017年6月12日
没有MATLAB函数,检查每一个层次的结构,结构或嵌套结构,以确定一个字段存在。“isfield”功能只检查一个嵌套结构的顶层。来确定一个字段存在在其他层面上,您可以使用下面的方法。
1。来确定一个字段存在于一个特定的子结构,使用子结构“isfield”而不是顶级。在这个例子中,一个的价值。b本身就是一个结构,你可以叫“isfield”。
a.b。c = 1;
isfield (a.b“c”)
ans =
逻辑
1
注意:如果第一个输入参数不是一个结构数组,然后“isfield”返回0(假)。虽然有其他MATLAB数据类型属性可以访问点符号,其他数据类型不是结构数组。
2。来确定各级领域存在嵌套结构,创建一个新的函数,检查所有级别的结构。打开MATLAB编辑器并粘贴下面的函数。作为一个MATLAB文件保存功能,名叫“myIsField.m”。
函数字段名isFieldResult = myIsField(指导)
%的名字是指导搜索的结构或数组结构
% fieldName的场函数的名称搜索
isFieldResult = 0;
f =字段名(指示(1));
为i = 1:长度(f)
如果(比较字符串(f{我},strtrim(字段名)))
isFieldResult = 1;
返回;
elseifisstruct(指示(1)。(f{我}))
isFieldResult = myIsField(指示(1),(f{我}),字段名);
如果isFieldResult
返回;
结束
结束
结束
称之为“myIsField”在一个嵌套结构。
a.b。c = 1;
myIsField (,“c”)
ans =
逻辑
1
6个评论
broken_arrow
2021年9月19日
编辑:broken_arrow
2021年9月19日
我修改这一点也与多层次合作
字段名
输入如
“公元前”
。我也第二扩展内置的
isfield
相应的行动。
函数out_isfieldresult = anyisfield (in_rootstruct in_field)
% ANYISFIELD:建于isfield函数的扩展。添加功能:
% 1。多级输入(如。“b.c.d”)
% 2。各级匹配嵌套的结构体的识别
in_field =字符串(in_field);
rootfieldnames =字符串(字段名(in_rootstruct (1)));
out_isfieldresult = false;
如果包含(in_field“。”)
current_searchfieldname = extractBefore (in_field,“。”);
其他的
current_searchfieldname = in_field;
结束
remaining_searchfieldnames = extractAfter (in_field,“。”);
为i = 1:长度(rootfieldnames)
如果比较字符串(rootfieldnames(我),current_searchfieldname)
如果ismissing (remaining_searchfieldnames)
out_isfieldresult = true;
返回
其他的
out_isfieldresult = anyisfield (in_rootstruct (1), (current_searchfieldname) remaining_searchfieldnames);
结束
elseifisstruct (in_rootstruct (1)。(rootfieldnames(我)))
out_isfieldresult = anyisfield (in_rootstruct (1)。(rootfieldnames(我)),current_searchfieldname);
如果out_isfieldresult = = true
返回;
结束
结束
结束
结束
更多的答案(3)
安德鲁•米勒
2017年5月19日
编辑:MathWorks支金宝app持团队
2023年4月27日在25
我需要解决这个问题,决定上传到Matlab中央。希望它可以帮助!
前提是:广度优先搜索找到任何发生和第一个暴突,返回的数量水平下发生治疗年代struct-nodes树。