sie*_*gel 0 string matlab if-statement
我有一个叫做的字符串name.根据以下方案,第三个字符name是表示与哪个月name相关联的字母:
Jan F
Feb G
Mar H
Abr J
May K
Jun M
Jul N
Aug Q
Sep U
Oct V
Nov X
Dec Z
Run Code Online (Sandbox Code Playgroud)
我想重命名name标识的文件,以便使用数字代替任意字母系统:
01
02
...
12
Run Code Online (Sandbox Code Playgroud)
为此,我使用if/elseif以下列方式:
if name(3) == 'F'
monthdesignator = '01';
elseif name(3) == 'G'
monthdesignator = '02';
elseif name(3) == 'H'
monthdesignator = '03';
elseif name(3) == 'J'
monthdesignator = '04';
elseif name(3) == 'K'
monthdesignator = '05';
elseif name(3) == 'M'
monthdesignator = '06';
elseif name(3) == 'N'
monthdesignator = '07';
elseif name(3) == 'Q'
monthdesignator = '08';
elseif name(3) == 'U'
monthdesignator = '09';
elseif name(3) == 'V'
monthdesignator = '10';
elseif name(3) == 'X'
monthdesignator = '11';
else
monthdesignator = '12';
end
newfilename=strcat('C:\TickDataMinuteBars\MinuteBarsCsv\',name(1),name(2),'20',name(4),name(5),monthdesignator,'.csv');
Run Code Online (Sandbox Code Playgroud)
但这是如此笨拙和重复.有没有更优雅的方式来做到这一点?
选项1:使用hashmap(此选项是最快且最简洁的):
% Define your table once.
keys = {'F','G','H','J','K','M','N','Q','U','V','X','W'};
values = {'01','02','03','04','05','06','07','08','09','10','11','12'};
lookup = containers.Map(keys,values,'UniformValues', true);
% Lookups run in constant O(1) time.
month = lookup(name(3));
Run Code Online (Sandbox Code Playgroud)
选项2:使用案例陈述,略好于if/else:
switch name(3)
case 'F', month = '01';
case 'G', month = '02';
case 'H', month = '03';
...
otherwise, month = '12';
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |