opérateur ternaire à matlab

y a-t-il une façon de taper si comme:

var = (cond) ? true : false;

ou devons-nous utiliser ce format?

if (cond)
 true
else
 false
end
20
demandé sur Dan 2011-04-08 16:18:38

6 réponses

MatLab n'a pas d'opérateur ternaire, ou n'importe quel autre sucre syntaxique pour les instructions if-line. Mais si votre if-statement est vraiment simple, vous pouvez juste l'écrire dans une ligne de toute façon:

if (cond); casetrue(); else; casefalse(); end

ce n'est pas aussi simple que l'opérateur ternaire, mais c'est encore mieux que de l'écrire en 5 lignes de code.

19
répondu Leonid Beschastny 2014-12-19 22:02:06

si vous avez seulement besoin de true ou false, vous pouvez faire ce que MatlabSorter suggère. Dans le cas où vous voulez un opérateur tertiaire réel (i.e. a = b ? c : d), il n'y en a pas à MATLAB. Cependant, en utilisant le fichier fourni ici, vous pouvez obtenir près.

10
répondu Darhuuk 2011-04-08 12:24:20

Vous pouvez faire

var = 5 > 4;

qui va mettre var à true. Il suffit de substituer ce dont vous avez besoin pour 5 > 4.

8
répondu MatlabSorter 2011-04-08 12:21:57

MATLAB n'a pas d'expressions conditionnelles, mais dans certaines situations vous pouvez obtenir un effet similaire en disant, par exemple,var = cond*true_expr + (1-cond)*false_expr. Contrairement à L'expression conditionnelle de C, celle-ci évaluera bien sûr toujours les deux true_expr et false_expr et si cond n'est pas 0 ou 1 (note:false se comporte comme 0; true se comporte comme 1) vous obtiendrez des résultats fous.

8
répondu Gareth McCaughan 2011-04-08 12:27:27

Hmm... personne n'a mentionné cette

fi = @(varargin)varargin{end-varargin{1}}

quelque part dans la doc il est écrit la " fin " est venue à l'un ce sera donc plus d'avenir

fi = @(varargin)varargin{length(varargin)-varargin{1}}

Utilisation :

fi(input('Do you like Matlab ? '),'yes','no')
>> no

Si votre besoin d'inline cas, voir Mathworks ...

7
répondu Carel 2015-08-27 15:24:39

j'utilise ce style souvent:

cond = what < ever;

n = getfield([23,42], {1+(what < ever)}) % for any 1x1-data
s = cell2mat(getfield({'no','yes'}, {1+(what < ever)})) % for nonuniform

il est assez compact pour ne pas nécessiter une fonction d'aide

1
répondu rascr 2017-10-27 09:31:13