Find logical and (&&) for string array

16 ビュー (過去 30 日間)
Mikel Jimenez
Mikel Jimenez 2023 年 2 月 24 日
コメント済み: Mikel Jimenez 2023 年 2 月 25 日
Hi,
I normally use && operations with numeric arrays, like:
if arrayX==1 && arrayY ==2
z=10
elseif arrayX==2 && arrayY==1
z=20
end
Now, I'm trying to do the same thing with string arrays, but cannot find the way to do it correctly, the && operand does not work here. Example:
if arrayX=="Left" && arrayY=="Right"
z=10
elseif arrayX=="Right" && arrayY=="Left"
z=20
end
Any help with this very much appreciated.
Thanks.

採用された回答

Steven Lord
Steven Lord 2023 年 2 月 24 日
That should work as long as the string arrays you're using in your comparisons are scalars.
arrayX = "Left";
arrayY = "Right";
if arrayX=="Left" && arrayY=="Right"
z=10
elseif arrayX=="Right" && arrayY=="Left"
z=20
end
z = 10
arrayX = "Right";
arrayY = "Left";
if arrayX=="Left" && arrayY=="Right"
z=10
elseif arrayX=="Right" && arrayY=="Left"
z=20
end
z = 20
It won't work if they're non-scalar string arrays, just like it wouldn't work with numeric arrays if they were non-scalar. I've wrapped each of these code segments in a try / catch block so I can show you the same behavior with both a non-scalar string array and a non-scalar numeric array.
try
arrayX = ["Left", "Left"];
arrayY = "Right";
if arrayX=="Left" && arrayY=="Right"
z=10
elseif arrayX=="Right" && arrayY=="Left"
z=20
end
catch ME
fprintf("This code threw error:\n%s\n", ME.message)
end
This code threw error: Operands to the logical AND (&&) and OR (||) operators must be convertible to logical scalar values. Use the ANY or ALL functions to reduce operands to logical scalar values.
try
arrayX = [1 2];
arrayY = 2;
if arrayX==1 && arrayY ==2
z=10
elseif arrayX==2 && arrayY==1
z=20
end
catch ME2
fprintf("This code threw error:\n%s\n", ME2.message)
end
This code threw error: Operands to the logical AND (&&) and OR (||) operators must be convertible to logical scalar values. Use the ANY or ALL functions to reduce operands to logical scalar values.
Both code segments threw the same error.

その他の回答 (1 件)

Dyuman Joshi
Dyuman Joshi 2023 年 2 月 24 日
編集済み: Dyuman Joshi 2023 年 2 月 24 日
Use strcmp or isequal to compare strings
str1 = "Left";
str2 = "Right";
if strcmp(str1,"Left") && strcmp(str2,"Right")
z=10
elseif strcmp(str1,"Right") && strcmp(str2,"Left")
z=20
end
z = 10
  1 件のコメント
Mikel Jimenez
Mikel Jimenez 2023 年 2 月 25 日
Thanks Dyuman, this seems to be working too.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeWhos についてさらに検索

製品


リリース

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by