2017-01-26 16 views
5

Próbuję wyzwolić warunek, jeśli zmienna spełnia jedną z dwóch wartości. Jestem świadomy mogę wyrazić jako:Jak uwzględnić wiele warunków w jednej instrukcji równoważności?

if x == 5 || x == 6 
    execute code... 
end 

ale zastanawiałem się, czy nie było coś nieco bardziej elegancki w przypadku x ma długą nazwę. Coś takiego:

if x == {5, 6} 
    execute code... 
end 

Ktoś ma jakieś pomysły?

Odpowiedz

6

Rzeczywiście istnieje podejście ogólne. Można użyć funkcji any aby sprawdzić, czy x jest równa każdy z elementów tablicy:

if any(x == [5, 6]) 
    % execute code 
end 

To działa dla tablic numerycznych. Jeśli masz do czynienia z tablicami komórkowych, można użyć ismember (dzięki @ nilZ0r!)

choices = {'foo', 'bar', 'hello'}; 
x = 'hello'; 

if ismember(x, choices) 
    % execute code 
end 

ismember działa zarówno liczbowych i komórek macierzy (dzięki @TasosPapastylianou).

+0

Ach to jest super, dziękuję! – jshep

+2

Jeśli zmienisz kolejność wprowadzania na 'ismember()' możesz pominąć 'any' przed nim (' ismember (x, choices) 'zamiast' any (ismember (choices, x)) ' – NLindros

+0

w rzeczywistości może użyć 'ismember' również w twoim przypadku.To ładniej i jaśniej, zamierzałem opublikować to jako odpowiedź, gdy zobaczyłem część 2 tutaj :) –

3

switch-case środowisko byłby elegancki wybór:

switch x 
    case {5,6} 
     x.^2 
    case {7,8} 
     x.^4 
    otherwise 
     x.^3 
end 

prace dla strun, a także:

switch x 
    case {'foo','bar'} 
     disp(x) 
    otherwise 
     disp('fail.') 
end 
+0

Nice! Nie wiedziałem o tym użyciu 'switch-case'. +1 – Lumen