Matlab 向后兼容包含()

Matlab 向后兼容包含(),matlab,backwards-compatibility,Matlab,Backwards Compatibility,我正在编写一组函数,供使用旧版本MATLAB(2015a/2015b)的同事使用。在我的一个函数中,我使用了仅在2016b中引入的contains(),因此不向后兼容。我想提供一个解决方案,但我不太确定如何进行。我正在处理的具体问题如下: files = {'/some/path/sub001file','/some/path/sub002file','/some/path/sub003file'}; subjects = {'sub001','sub003'}; files = files(c

我正在编写一组函数,供使用旧版本MATLAB(2015a/2015b)的同事使用。在我的一个函数中,我使用了仅在2016b中引入的
contains()
,因此不向后兼容。我想提供一个解决方案,但我不太确定如何进行。我正在处理的具体问题如下:

files = {'/some/path/sub001file','/some/path/sub002file','/some/path/sub003file'};
subjects = {'sub001','sub003'};
files = files(contains(files,subjects))

我正在寻找一种方法,将第三行替换为将在MATLAB2015a及更高版本上运行并提供相同输出的第三行。另外,由于这是一个相当小的操作,因此代码的可读性比计算效率更重要

这有点复杂,但下面的方法可以奏效

idx = cellfun(@(c)~all(cellfun(@(d)isempty(strfind(c,d)),subjects)),files);
files = files(idx);

这有点复杂,但下面的方法会奏效

idx = cellfun(@(c)~all(cellfun(@(d)isempty(strfind(c,d)),subjects)),files);
files = files(idx);

…神圣的密码之母。嗯,它很管用。接下来的几分钟我会想办法;)。谢谢它基本上只是一个嵌套循环。外循环遍历
文件
的所有元素,内循环遍历
主题
的所有元素。如果
主题
的任何元素包含在
文件
的元素中,则
idx
的相应元素设置为
…代码圣母。嗯,它很管用。接下来的几分钟我会想办法;)。谢谢它基本上只是一个嵌套循环。外循环遍历
文件
的所有元素,内循环遍历
主题
的所有元素。如果
主题
的任何元素包含在
文件
的元素中,则
idx
的相应元素设置为