【问题标题】:Backwards compatible contains()向后兼容 contains()
【发布时间】:2017-09-20 00:30:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: matlab backwards-compatibility


    【解决方案1】:

    这有点令人费解,但以下将起作用,

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

    【讨论】:

    • ...代码之母。那么它的工作原理。我将在接下来的几分钟内弄清楚如何;)。谢谢!
    • 它基本上只是一个嵌套循环。外循环遍历files 的所有元素,内循环遍历subjects 的所有元素。如果subjects 的任何元素包含在files 的元素中,则idx 的对应元素设置为true
    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多