matlab中setfield函数的使⽤
matlab的setfield函数是给结构数组的字段指定值的。有以下两种调⽤⽅式:
s = setfield(s,'field',value)
s = setfield(s,{sIndx1,...,sIndxM},'field',{fIndx1,...,fIndxN},value)
第⼀种就不说了,第⼆种先看⼀个程序:
grades = [];
level = 5;
semester = 'Fall';
subject = 'Math';
student = 'John_Doe';
fieldnames = {semester subject student}
value函数什么意思
newGrades_Doe = [85, 89, 76, 93, 85, 91, 68, 84, 95, 73];
grades = setfield(grades, {level}, ...
fieldnames{:}, {10, 21:30}, ...
newGrades_Doe);
grades = setfield(grades, {level}, fieldnames{:}, {10,':'}, []);
这个是啥意思呢?看得有点懵逼。结构体标1x5struct就是说这个结构体有5个记
录,setfield(grades, {level},fieldnames{:}, {10, 21:30}, newGrades_Doe);就是说让结构数组grades的第5(level)个记录的“Fall”字段的“Math”字段的“John_Doe”字段(fieldnames{:})的那个值的第10⾏的21列到30列赋值为[85, 89, 76, 93, 85, 91, 68, 84, 95, 73](newGrades_Doe)。这是个结构体的层层嵌套。输⼊:
grades(level).(semester).(subject).(student)(10, 21:30)
就能返回“newGrades_Doe”,即:
ans =
85    89    76    93    85    91    68    84    95    73
那么这⾥的元胞数组“fieldnames{:}”怎么理解呢?其实就是逗号隔开的不同元素⽽已,也就是说:
setfield(grades, {level},fieldnames{:}, {10, 21:30}, newGrades_Doe);
等价于
setfield(grades, {level},fieldnames{1},fieldnames{2},fieldnames{3}, {10, 21:30}, newGrades_Doe);
grades = setfield(grades, {level}, fieldnames{:}, {10,’:’}, []);就是将赋值的那⼏个数所在的那⼀⾏去掉。matlab中没有的东西,你再赋值就会强制产⽣这个东西。有的东西,赋空就会去掉。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。