我有以下嵌套结构:
hole 1x200 struct,diam 1x12 struct,其中包含以下字段:pos,freq1,fre12
那是:
hole(1 to 200).diam(1 to 12).pos
.freq1
.freq2
从值(freq1
和freq2
),我想获取结构的字段名称。所以我需要找到与freq1和freq2匹配的值并显示fieldname。
我尝试使用structfun将函数应用于每个字段。
[struct.field]=structfun(@(x) find(x.freq1==27.059783995484867 & freq2==76.468355874897000))
但我想我在代码上写错了。
另外我创建了一个匿名函数但是我有以下错误:
'使用structfun /输入到STRUCTFUN的错误必须是标量 结构
。然而,当我验证结构的特定值是否是标量时,我得到了肯定答案:isscalar(hole(130).diam(10))
我相信我更接近使用此脚本的解决方案:
myfun=@(yourarray,desiredvalue) yourarray==desiredvalue;
%//Apply function to each field of scalar structure, it SCALAR??
desiredfieldindex=myfun(structfun(@(x) x,hole),26.697046257785030)
desiredFieldName=fNames(desiredFieldIndex)
我不知道我是否处于严谨的路径中,或者我应该使用函数find。在那种情况下我也不知道如何实现它。
答案 0 :(得分:1)
一些事情。
浮点值!小心!!永远不要将浮点值与val==0.3
进行比较!做abs(val-0.3)<10^-8
或类似的事情。 Read more here
您使用structfun
错误。该函数需要2个参数,你只需传递1个!但是,structfun
会将函数应用于每个字段,因此您不会在这种意义上使用它。让我们看一个例子
示例:
a.hithere=5;
a.notthis=3;
fun=@(x)x==5;
[isfive]=structfun(fun,a)
isfive =
1
0
如您所见,它将功能应用于每个功能。如果您尝试将功能更改为fun=@(x)x.hithere==5
,则会出现错误!由于该函数应用于每个字段,因此x.hithere.hithere
或x.notthis.hithere
不存在。
如果您想要同时检查这两个值,则需要单独检查它们,分别调用structfun
或避免structfun
并进行for循环。