Access value in cell arrays
2 次查看(过去 30 天)
显示 更早的评论
A{1,1}.str = 1;
A{2,1}.str = 2;
... (so on)
A{10,1}.str = 10;
Can I say:
B = A{:,1}.str;
so that:
B=[1 2 3 4 5 6 7 8 9 10];
Thanks very much
2 个评论
per isakson
2013-6-29
Is A supposed to be a cell arrays of structures?
A field named "str" holding a numerical value isn't that confusing?
采纳的回答
per isakson
2013-6-29
编辑:per isakson
2013-6-29
What you look for can be achieved with cellfun, see below.
Indexing like C{:}.field is not supported (AFAIK).
The script
S1.field=1;
S2.field=2;
S3.field=3;
C = { S1, S2, S3 };
C{1}.field
C{2}.field
C{3}.field
C{:}.field
returns
ans =
1
ans =
2
ans =
3
Bad cell reference operation.
And
vec = cellfun( @(S) S.field, C, 'uni', true )
returns
ans =
1 2 3
.
EDIT
The single command with cellfun is justified in case the cells of the cell array contain structures with only some fields in common.
Example:
S1.field=1;
S2.field=2;
S3.field=3;
S1.field1=1;
S2.field2=2;
S3.field3=3;
C = { S1, S2, S3 };
vec = cellfun( @(S) S.field, C, 'uni', true )
returns
vec =
1 2 3
4 个评论
更多回答(2 个)
Matt J
2013-6-29
编辑:Matt J
2013-6-29
No. You can do this instead
A(1).str = 1;
A(2).str = 2;
...
A(10).str = 10;
B=[A(:).str]
3 个评论
Matt J
2013-6-29
It would not make sense to hold structures having the same fields inside cells. It just makes them harder to get to (as you've discovered).
per isakson
2013-6-29
编辑:per isakson
2013-6-29
I agree.
However, for some reason the cell array may contain structures with only some fields in common.
James Tursa
2013-6-29
Another variation:
x = [A{:,1}];
B = [x.str];
2 个评论
Matt J
2013-6-30
TN, if James solution works for you, there is really no reason to be carrying around A. You may as well just use x. As per said, it might make sense if A{i} were structs with different fields, but James' approach will not work if that is the case.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Graphics Object Programming 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!