如果那么单线

时间:2014-12-19 07:59:27

标签: matlab if-statement conditional-operator

MATLAB中是否有单行内容?

if a > b
    foo = 'r';
else
    foo = 'g';
end

3 个答案:

答案 0 :(得分:8)

不像C风格的三元运算符那样优雅,但是您可以利用matlab在这种情况下自动将逻辑转换为双精度的事实。因此,您可以将您想要的结果乘以您的条件(r)的真实(a > b),并将其添加到您想要的结果的产品中(即g not 你的条件:

foo = (a > b)*c + (~(a > b))*d

因此,如果我们允许c = 'r'd = 'g',那么我们需要做的就是在结尾处将foo投回char

char(foo)

char((a > b)*'r' + ~(a > b)*'g')

请注意,这仅在cd具有相同尺寸时才有效(因为+)...

答案 1 :(得分:8)

MatLab中的单行if语句没有语法糖,但如果你的语句很简单,你可以把它写成一行。

我过去常常在我的旧项目中使用单行if语句:

if (k < 1); k = 1; end;

在你的情况下,它看起来像:

if a > b; foo = 'r'; else; foo = 'g'; end;

或者,如果你不喜欢分号

if a > b, foo = 'r'; else, foo = 'g'; end

不如你想象的那么漂亮。

答案 2 :(得分:5)

尽量避免在matlab中使用if语句,只需将逻辑转换为(vector)math:

foo = 1 + (a <= b)

编辑:

对于更一般的情况,分配&#39; r&#39;或者&#39; g&#39;,您可以使用:

col = {'r', 'g'};
foo = col(1 + (a > b));

例如,使用isGreen布尔值可以:

foo = col(1 + isGreen);

这也可以是一个布尔返回函数

foo = col(1 + isGreen(a))