0

我有一些具有相似字段名称的结构数组(如结构 1、结构 2、结构 3、...)。我想扫描所有结构并仅返回第一个字段为 5(Field1==5)的结构。到目前为止我有这个代码,

for k=1:3
    s=sprintf('Structure%d',k)
    Structure=load(s)
    idx=cellfun(@(x) x==5, {Structure.Field1})
    out=Structure(idx)
    v{k}={Structure.Field1}
end

但它给了我这个错误:

Reference to non-existent field 'Field1'. 

有人可以指出这里有什么问题吗?

谢谢

4

2 回答 2

0
for k=1:3
    s=sprintf('Structure%d',k)
    Structure=load(s)
    eval(['newStructure(k)=Structure.' s]);
    idx(k)=cellfun(@(x) x==5, {newStructure(k).Field1})
end
%extract the structures from newStructure which have 1 in idx
out=newStructure(idx); %idx should be a logical array
for i=1:size(out,2)
    v(i)=out(i).Field1;
end

这应该可以完美地工作。

于 2013-02-24T09:08:05.993 回答
0

似乎您保存的某些结构中没有'Field1'字段。
在这种情况下,您可能想尝试其他方法。
首先定义一个函数(在m文件中)

function res = iff( cond, true_case, false_case )
%
% conditional execution of two function handles
% 
% true_case and false_case are function handles expecting no inputs
%
if cond
   res = true_case();
else
   res = false_case();
end

一旦你有了这个功能,你就可以在cellfun

idx = cellfun( @(x) iff( isfield(x, 'Field1'), @() x.Field1 == 5, @() false), Structure );
于 2013-02-24T09:09:00.170 回答