如果那么单线

Sib*_*ing 2 matlab if-statement conditional-operator

在MATLAB中有这样的单线程吗?

if a > b
    foo = 'r';
else
    foo = 'g';
end
Run Code Online (Sandbox Code Playgroud)

Leo*_*tny 10

有包括在MATLAB if语句单行没有语法糖,但如果你的发言是非常简单的,你可以在一行写.

我以前在我的旧项目中有像这样的单行if语句:

if (k < 1); k = 1; end;
Run Code Online (Sandbox Code Playgroud)

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

if a > b; foo = 'r'; else; foo = 'g'; end;
Run Code Online (Sandbox Code Playgroud)

或者,如果你不喜欢分号

if a > b, foo = 'r'; else, foo = 'g'; end
Run Code Online (Sandbox Code Playgroud)

但是,并不像你想象的那么漂亮.


Dan*_*Dan 8

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

foo = (a > b)*c + (~(a > b))*d
Run Code Online (Sandbox Code Playgroud)

所以如果我们放弃c = 'r',d = 'g'那么我们需要做的就是foo回到char最后:

char(foo)
Run Code Online (Sandbox Code Playgroud)

要么

char((a > b)*'r' + ~(a > b)*'g')
Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用于cd具有相同尺寸(因为+)...


Ofr*_*viv 5

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

foo = 1 + (a <= b)
Run Code Online (Sandbox Code Playgroud)

编辑:

对于更一般的情况,分配'r'或'g',您可以使用:

col = {'r', 'g'};
foo = col(1 + (a > b));
Run Code Online (Sandbox Code Playgroud)

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

foo = col(1 + isGreen);
Run Code Online (Sandbox Code Playgroud)

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

foo = col(1 + isGreen(a))
Run Code Online (Sandbox Code Playgroud)

  • 最好的答案,非常一般 - 但是我会开始质疑代码的可读性.在这种情况下坚持使用`if`语句可能更有意义,以便未来的编码员(包括你)不必破译正在发生的事情. (5认同)