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}
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中没有的东西,你再赋值就会强制产生这个东西。有的东西,赋空就会去掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆嵩

有打赏才有动力,你懂的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值