Matlab:改进树遍历代码

时间:2012-11-24 23:24:52

标签: file matlab data-structures tree

我的结构如下所示:

database structure

我有一个包含database的{​​{1}}文件夹。每个brandsbrandlogo组成。 我想遍历所有query中的所有文件(file_1file_n),并对它们执行一些操作。

我写了这段代码:

database

代码正常,它遍历所需的文件。 但是,代码有点难看和混乱。

我想知道我能否以更好的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

遍历一组目录就像你正在做的那样。但是,有些东西你可以做得更容易/我会做的不同:

brandsFolders = dir(database);
brandsFolders( ~[brandsFolders.isdir] | strcmp({brandsFolders.name},'.') | strcmp({brandsFolders.name},'..')) = [];

for ii=1:numel(brandsFolders)
    logoAndQuery  = dir(fullfile(database,brandsFolders(ii).name));
    logoAndQuery( ~[logoAndQuery.isdir] | strcmp({logoAndQuery.name},'.') | strcmp({logoAndQuery.name},'..')) = [];

    logo = fullfile(databasecurrentBrand,brandsFolders(ii).name), logoAndQuery(1).name);
    files = dir(logo);
    files(strcmp({files.name},'.') | strcmp({files.name},'..'))=[];

    for jj=1:numel(files)
        %operations on each files(j).name
    end
end

(当然,只有在您确定logoAndQuery(1)始终是'徽标'目录时才有效。)
或者使用子功能进行目录查询:

function dirs = getDirs(strPath)
    dirs = dir(strPath);
    dirnames = {dirs.name};
    dirs ( ~[dirs.isdir] | strcmp(dirnames ,'.') | strcmp(dirnames ,'..')) = [];
end

它为您提供了一些较短的代码并给出了以下内容,其中我还假设'logo'目录中没有目录:

brandsFolders = getDirs(database);

for ii=1:numel(brandsFolders)
    logoAndQuery  = getDirs(fullfile(database,brandsFolders(ii).name));
    logo = fullfile(databasecurrentBrand,brandsFolders(ii).name), logoAndQuery(1).name);
    files = dir(logo);
    files([files.isdir])=[];

    for jj=1:numel(files)
        %operations on each files(j).name
    end
end