【问题标题】:Iterating over a list of strings in MATLAB迭代MATLAB中的字符串列表
【发布时间】:2012-05-28 02:13:44
【问题描述】:

我正在尝试遍历 MATLAB 中的字符串列表。问题是,在“for”循环中,我的迭代器被认为是“单元格”而不是字符串。

for str = {'aaa','bbb'}
  fprintf('%s\n',str);
end

??? Error using ==> fprintf
Function is not defined for 'cell' inputs.

解决此问题的正确\优雅方法是什么?

【问题讨论】:

  • 我想知道这是否是 MATLAB 设计中的概念错误。为什么要这样建?
  • @Memming 不。只是一个不知道如何使用*printf 系列函数的人

标签: string matlab loops


【解决方案1】:

您应该通过str{1} 调用单元格的内容,如下所示以使其正确:

for str = {'aaa','bbb'}
  fprintf('%s\n',str{1});
end

这是一个more sophisticated example,用于打印元胞数组的内容。

【讨论】:

  • char(str) 也可以工作,并且如果循环被更改则不会失败,以便 str 作为 char 数组而不是单元格进入
  • 每次使用字符串元胞数组时,这真的让我很困扰。难道没有更优雅的方法来遍历字符串的单元格数组以直接获取单元格内容而不调用 str{1}? -- 编辑 -- 没关系,刚刚发现这个:stackoverflow.com/questions/16587564/…
【解决方案2】:
str={'aaa','bbb'};
fprintf('%s\n',str{:});

不需要for 循环。

编辑: 另见:cellfun

【讨论】:

  • @petrichor 目前我以编写 matlab 为生。我一直深陷cellfun 和像这样的重复电话中。我还学习了关于 matlab 的一条真正规则:永远不要使用循环。即使是 repmatpermutereshape 的混乱,也比迭代更快。
【解决方案3】:

从 R2016b 开始,您可以使用 string arrays:

for str = ["aaa" "bbb"]
  fprintf('%s\n',str);
end

【讨论】:

    猜你喜欢
    • 2011-05-01
    • 2016-06-27
    • 1970-01-01
    • 2021-04-14
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多