作业是
您正在测试功能性近红外(fNIR)设备和 测量每个主体能够控制计算机鼠标使用的程度 它。编写一个函数
getcogdata
,返回所请求的类别 请求的用户ID。如果请求的用户不存在,则返回空 矩阵。如果没有请求用户,请返回a 所有用户的值的单元格数组。
我的代码如下
function output=getcogdata(cat,id)
info=struct('id',{'33','10','48','41'},'name',{'Joe','Sally','Harry','Ann'},...
'age',{'27','25','23','19'},...
'height',{'5.9','6.1','5.8','6.0'},'score',{'9,5','9.3','9.7','9.4'});
if id=='33'
id=1;
elseif id=='10'
id=2;
elseif id=='48'
id=3;
else id=='41'
id=4;
end
output=info(id).(cat)
end
我的代码适用于指定测量和用户的时间,但如果用户不存在或未请求用户,我无法弄清楚如何编码。我没试过exist(id)
我收到了错误。有没有办法让我不能存在?
答案 0 :(得分:2)
Matlab的exist
函数会告诉您当前的Matlab实例 是已知。 不会告诉您是否存在特定值。
您的任务可能比您原先想象的要复杂一点,但您可以使用strcmp
和any
混合完成任务。
首先,我们将id
中的info
转换为带有
{info.id}
现在我们可以使用strcmp
将它们与id
strcmp(id, {info.id})
最后,我们可以使用any
告诉我们{info.id}
中的任何值是否等于id
。所以把这一切放在一起我们得到了
>> info = struct('id',{'33','10','48','41'});
>> id = '33';
>> any(strcmp(id, {info.id}))
ans =
1
我们也可以在id
中找到{info.id}
的索引,并使用find
而不是{{3}取消问题中的if
语句}
>> id = '10'; % Present in index 2 - Output should be 2
>> find(strcmp(id, {info.id}))
ans =
2
要回答关于未将id
传递给getcogdata
的最终问题,您可以使用any
function output = getcogdata(cat,id)
if (nargin < 2)
fprintf(1, 'No id passed to getcogdata()\n');
end
end
nargin
会告诉您有多少参数传递给函数getcogdata
。
感谢@ nargin
教我Matlab的strcmp
比我假设它类似的C版要好得多!
注意:请务必阅读手册!