使用查找的多个查询(或语句)
Multiple queries (OR statements) using find
目前要使用 find
执行多个查询,我分别调用每个查询,用 |
分隔
index = find(strcmp(data{:,{'type'}},'A') | strcmp(data{:,{'type'}},'B') | strcmp(data{:,{'type'}},'C') | strcmp(data{:,{'type'}},'D'));
查找字段 'type' 包含 A、B、C 或 D 的所有行。
data
保存在 table 中,因此使用 }
.
有没有更简洁的方法来做到这一点,而不需要每次都完整地指定查询?
您可以使用 ismember
而不是多次使用 strcmp
。
index = find(ismember(data{:,{'type'}}, {'A','B','C','D'}));
另一种方法(因为 ismember
可能比多次使用 strcmp
慢)是分解重复代码 -
x = data{:, {'type'}}; %# This isn't valid MATLAB but whatever...
index = find(strcmp(x,'A') | strcmp(x,'B') | strcmp(x,'C') | strcmp(x,'D'));
为了便于阅读,您也可以使用多行
x = data{:, {'type'}}; %# This isn't valid MATLAB but whatever...
index = find(strcmp(x,'A') ...
| strcmp(x,'B') ...
| strcmp(x,'C') ...
| strcmp(x,'D'));
目前要使用 find
执行多个查询,我分别调用每个查询,用 |
index = find(strcmp(data{:,{'type'}},'A') | strcmp(data{:,{'type'}},'B') | strcmp(data{:,{'type'}},'C') | strcmp(data{:,{'type'}},'D'));
查找字段 'type' 包含 A、B、C 或 D 的所有行。
data
保存在 table 中,因此使用 }
.
有没有更简洁的方法来做到这一点,而不需要每次都完整地指定查询?
您可以使用 ismember
而不是多次使用 strcmp
。
index = find(ismember(data{:,{'type'}}, {'A','B','C','D'}));
另一种方法(因为 ismember
可能比多次使用 strcmp
慢)是分解重复代码 -
x = data{:, {'type'}}; %# This isn't valid MATLAB but whatever...
index = find(strcmp(x,'A') | strcmp(x,'B') | strcmp(x,'C') | strcmp(x,'D'));
为了便于阅读,您也可以使用多行
x = data{:, {'type'}}; %# This isn't valid MATLAB but whatever...
index = find(strcmp(x,'A') ...
| strcmp(x,'B') ...
| strcmp(x,'C') ...
| strcmp(x,'D'));