我发现这个网站对我遇到的很多问题非常有用,这是我在这里发布的第一个问题。我没有通过搜索找到答案所以我道歉,如果它存在于其他地方。
我所拥有的是一个结构数组(MxN),创建为
first = struct('field1',0);
array = repmat(first,[MxN]); %now we have an array of structures
'field1'
我初始化为0
,因为array(i,j)
中每个结构的此字段长度可变。这意味着我事先并不知道它的长度。我的程序完成后,array(1,1).field1
是一个结构字段,与array(1,2)
相同,但列表的长度可能相同,也可能不同。
有没有办法可以在'field1'
中返回结构列表的长度?
答案 0 :(得分:0)
如果我理解正确,对于数组的每个结构,field1
将包含一个向量,并且您希望获得每个向量的长度。例如
array = repmat(struct('field1',0), [2 3]);
for i=1:size(array,1)
for j=1:size(array,2)
array(i,j).field1 = rand(randi([1 10]),1);
end
end
如果是这种情况,可以通过以下两种方式获得长度:
>> len = cellfun(@length, {array.field1})
len =
3 8 9 4 1 7
>> len = arrayfun(@(s) length(s.field1), array)
len =
3 9 1
8 4 7
事实证明,field1
包含另一个嵌套结构,并且您希望获得此嵌套结构中数据的每个元素的字段数。实施例
array = repmat(struct('field1',0),[1 2]);
array(1,1).field1.a = 1;
array(1,1).field1.b = 1;
array(1,2).field1.c = 2;
len = arrayfun(@(s) length(fieldnames(s.field1)), array)