matlab - 以编程方式获取有效的开关/案例值

标签 matlab

当 MATLAB 扫描 switch/case block 中的 case 时,它​​会记住它跳过的值吗?是否可以访问该列表?我有几个带有长 switch\case block 的函数,如果它们返回 otherwise,我想让它们返回一个有效 case 值的列表。例如,我有一个函数可以返回一组 Material 的光学常数。它目前有大约 20 种不同的 Material ,而且随着我考虑使用新 Material ,它还在不断增加。

我意识到我可以对其进行暴力破解,然后将所有有效案例重新键入到 otherwise 下的元胞数组中,然后让函数抛出错误并返回有效响应列表,但是保持两个列表没有错误或随着时间的推移逐渐出现懒惰是一项挑战。

最佳答案

澄清一下,听起来您要执行的操作类似于以下内容:

value = 'z';
output = [];
switch value
    case 'a'
        output = 1.234;
    case 'b'
        output = 2.345;
    case 'c'
        output = 3.456;
    otherwise
        output = [];
        disp('Please use one the the following values:  a, b, c')
        %It would be nice to auto-populate that string wouldn't it?
end

这在 Matlab(或我所知道的任何语言)中是不可能直接实现的。


但是,如果您从 switch/case 语句转移到更加以数据为中心的代码设计,就会变得容易。例如,上面的代码可以重写为:

%Setup (this can be preloaded and stored as persistent if too time consuming)
count = 1;
allvalues(count).name = 'a'; allvalues(count).value = 1.234; count = count+1;
allvalues(count).name = 'b'; allvalues(count).value = 2.345; count = count+1;
allvalues(count).name = 'c'; allvalues(count).value = 3.456; count = count+1;

%Lookup
value = 'z';  %Also try value = 'a'

maskMatch = strcmp({allvalues.name},value);
if any(maskMatch)
    output = allvalues(maskMatch).value;
else
    disp('Please use one of the following values:');
    disp({allvalues.name});
end

这是使用结构数组存储数据的示例。有很多方法可以使用 Matlab 数据结构来存储这种数据,例如 map 或元胞数组。有关比较全面的列表,请参阅此问题的答案:MATLAB Changing the name of a matrix with each iteration

关于matlab - 以编程方式获取有效的开关/案例值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17325614/

相关文章:

string - 连接两个字符串,其中第一个字符串最后有一个空格 Matlab

matlab符号方程给出未确定的结果?

matlab更新时间向量

matlab - 在 Matlab 中将二维矩阵导出为三元组格式 CSV 文件的最快方法

matlab - 如何在 MATLAB 的 bar3 图中隐藏零值

Matlab 将单个子图保存为 jpg

matlab - 如何在matlab中将while循环转换为for循环?

Matlab:保存后翻转图例顺序和图例重叠图

MATLAB:在每行中查找第 n 个最小元素

arrays - 在一行中多次递增 MATLAB 数组的一个值