通过连接字符串定义变量
define variable by concatenating strings
我想迭代定义一个变量,其名称是两个字符串的连接。
特别是,以下代码旨在创建一个变量 Uvel_spring,其中包含存储在文件 spring_surface.mat :
seasons{1}='spring';
seasons{2}='summer';
seasons{3}='autumn';
seasons{4}='winter';
for ii=1:4
['Uvel_',char(seasons(ii))] = load([char(seasons(ii)),'_surface.mat'],...
'Uvel');
end
但是,我收到以下错误:
An array for multiple LHS assignment cannot contain LEX_TS_STRING.
我用evalc
解决了它:
for ii=1:4
evalc( sprintf(['Uvel_',char(seasons(ii)),'=','load(''',char(seasons(ii)),'_surface.mat'',',...
'''Uvel''',')']) );
end
但是,这太可怕了,我想改进代码。
有人有替代解决方案吗?
改用struct
。
for ii=1:4
Uvel.(seasons{ii}) = load([seasons{ii},'_surface.mat'], 'Uvel');
end
您最终会将这四个季节作为 Uvel
的字段。因此,您将以 Uvel.spring
的方式访问 Uvel_spring
,其他人也同样如此。
我想迭代定义一个变量,其名称是两个字符串的连接。
特别是,以下代码旨在创建一个变量 Uvel_spring,其中包含存储在文件 spring_surface.mat :
seasons{1}='spring';
seasons{2}='summer';
seasons{3}='autumn';
seasons{4}='winter';
for ii=1:4
['Uvel_',char(seasons(ii))] = load([char(seasons(ii)),'_surface.mat'],...
'Uvel');
end
但是,我收到以下错误:
An array for multiple LHS assignment cannot contain LEX_TS_STRING.
我用evalc
解决了它:
for ii=1:4
evalc( sprintf(['Uvel_',char(seasons(ii)),'=','load(''',char(seasons(ii)),'_surface.mat'',',...
'''Uvel''',')']) );
end
但是,这太可怕了,我想改进代码。
有人有替代解决方案吗?
改用struct
。
for ii=1:4
Uvel.(seasons{ii}) = load([seasons{ii},'_surface.mat'], 'Uvel');
end
您最终会将这四个季节作为 Uvel
的字段。因此,您将以 Uvel.spring
的方式访问 Uvel_spring
,其他人也同样如此。