使用 contains() 在我的 MATLAB 代码中对 If 语句输出感到困惑
Confusion about If statement output in my MATLAB code using contains()
如果有人问过类似的问题,我们深表歉意。
我正在尝试比较两个公司名称列表,并在 for
循环中创建了一系列 if
语句,在 if
中使用 contains()
函数] 语句。
逻辑是,对于原始列表中的每个公司名称 X,将计算 if
个语句:
if
:如果在两个列表的前 50 名中有匹配项,那么我将获得公司名称并声明“X 在 2020 年的前 50 名列表中”。
elseif
:如果原始列表的前 50 名与次要列表的其余部分匹配,那么我将获得公司名称并声明“X 在 2020 年总列表中” “
else
:如果没有匹配,我得到与声明“X不在2020列表中”不匹配的公司名称
截至目前,我的输出是所有匹配但具有 (3) 中声明的公司,即我的 else
声明。不知道为什么,但我的 else
语句正在捕获我的 if
和 elseif
语句输出。
代码:
year1 = data(1:end, 1:4); %tables
year30 = data(1:end, 121:124);
names30_50 = year30{1:50, 2}; %cells
names30_all = year30{:, 2};
names1_50 = year1{1:50, 2};
names1_all = year1{:, 2};
for i = 1:height(names1_50)
if contains(names30_50, names1_50{i}) %comparing both top 50 lists
disp(names1_50{i})
fprintf('%s is in the 2020 top 50 list.\n',names1_50{i})
elseif contains(names30_all, names1_50{i}) %comparing top 50 of 1990 with all of 2020
disp(names1_50{i})
fprintf('%s is in the 2020 overall list.\n',names1_50{i})
else
fprintf('%s is not in the 2020 list.\n',names1_50{i});
end
end
输出示例:
General Motors is not in the 2020 list.
Ford Motor is not in the 2020 list.
Exxon Mobil is not in the 2020 list.
Intl. Business Machines is not in the 2020 list.
General Electric is not in the 2020 list.
Mobil is not in the 2020 list.
Altria Group is not in the 2020 list.
Chrysler is not in the 2020 list.
它还在继续,但所有这些公司都在两个列表中。
contains() 函数用于评估字符串或字符中是否存在模式。
例子
你有一个 char ch='my_char';
%You have a char
ch = 'my_char';
%and another piece of char, the pattern
pattern = 'char';
%Evaluate if pattern is in my_char
disp(contains(ch, pattern))
% It returns true
(对不起,我不知道如何包含 matlab 代码)
如果我没看错的话,你的第一个参数是一个单元格。在这种情况下,函数 returns 包含一个逻辑数组。对于单元格 names30_50 的每个元素,您知道它是否包含 names1_50{i} 字符。
但是,如果给 if 语句一个逻辑数组,它只会在数组中的所有元素都为真时执行 bloc。在你的情况下,它显然永远不会发生。
你需要做的就是写
if any(contains(names30_50, names1_50{i}))
...
any() 函数 returns 如果逻辑数组中至少有一个元素为真,则为真。
顺便说一下,我宁愿使用 strcmp() 函数而不是 contains()。
希望我理解正确你的问题。
如果有人问过类似的问题,我们深表歉意。
我正在尝试比较两个公司名称列表,并在 for
循环中创建了一系列 if
语句,在 if
中使用 contains()
函数] 语句。
逻辑是,对于原始列表中的每个公司名称 X,将计算 if
个语句:
if
:如果在两个列表的前 50 名中有匹配项,那么我将获得公司名称并声明“X 在 2020 年的前 50 名列表中”。elseif
:如果原始列表的前 50 名与次要列表的其余部分匹配,那么我将获得公司名称并声明“X 在 2020 年总列表中” “else
:如果没有匹配,我得到与声明“X不在2020列表中”不匹配的公司名称
截至目前,我的输出是所有匹配但具有 (3) 中声明的公司,即我的 else
声明。不知道为什么,但我的 else
语句正在捕获我的 if
和 elseif
语句输出。
代码:
year1 = data(1:end, 1:4); %tables
year30 = data(1:end, 121:124);
names30_50 = year30{1:50, 2}; %cells
names30_all = year30{:, 2};
names1_50 = year1{1:50, 2};
names1_all = year1{:, 2};
for i = 1:height(names1_50)
if contains(names30_50, names1_50{i}) %comparing both top 50 lists
disp(names1_50{i})
fprintf('%s is in the 2020 top 50 list.\n',names1_50{i})
elseif contains(names30_all, names1_50{i}) %comparing top 50 of 1990 with all of 2020
disp(names1_50{i})
fprintf('%s is in the 2020 overall list.\n',names1_50{i})
else
fprintf('%s is not in the 2020 list.\n',names1_50{i});
end
end
输出示例:
General Motors is not in the 2020 list.
Ford Motor is not in the 2020 list.
Exxon Mobil is not in the 2020 list.
Intl. Business Machines is not in the 2020 list.
General Electric is not in the 2020 list.
Mobil is not in the 2020 list.
Altria Group is not in the 2020 list.
Chrysler is not in the 2020 list.
它还在继续,但所有这些公司都在两个列表中。
contains() 函数用于评估字符串或字符中是否存在模式。 例子 你有一个 char ch='my_char';
%You have a char
ch = 'my_char';
%and another piece of char, the pattern
pattern = 'char';
%Evaluate if pattern is in my_char
disp(contains(ch, pattern))
% It returns true
(对不起,我不知道如何包含 matlab 代码)
如果我没看错的话,你的第一个参数是一个单元格。在这种情况下,函数 returns 包含一个逻辑数组。对于单元格 names30_50 的每个元素,您知道它是否包含 names1_50{i} 字符。
但是,如果给 if 语句一个逻辑数组,它只会在数组中的所有元素都为真时执行 bloc。在你的情况下,它显然永远不会发生。
你需要做的就是写
if any(contains(names30_50, names1_50{i}))
...
any() 函数 returns 如果逻辑数组中至少有一个元素为真,则为真。
顺便说一下,我宁愿使用 strcmp() 函数而不是 contains()。
希望我理解正确你的问题。