【问题标题】:MATLAB: Perform "For-loop or IF-statement" only for specific character arraysMATLAB:仅对特定字符数组执行“For-loop 或 IF 语句”
【发布时间】:2021-04-14 18:03:20
【问题描述】:

我有 60 个不同的字符数组(Book01、Book02、...、Book60)。 (例如 Book01 是一个 1x202040 字符。)。我只想在 Book45 到 Book58 上执行某个程序。

如何编写 IF 语句或 FOR 循环,以便仅对字符数组 Book45 到 Book58 执行该过程?例如:

Book05  % Inserted Array for test

if Book45|Book46|Book47|Book48|Book49|Book50|Book51|Book52|Book53|Book54|Book54|Book56|Book57|Book58 % If inserted array is Book45-58     
   % Procedure to be performed on "Inserted Array", only if Book45-58    
else
   % No Procedure on Book01-44 or Book59-60
end

谢谢

【问题讨论】:

  • 将所有这些数组放在一个数据结构中,例如结构体或元胞数组。然后迭代变得微不足道。
  • 是 Book045 还是 Book45 ?
  • @dpdp。敏锐的眼光。应该是Book45。我已经在问题中更正了。

标签: matlab for-loop if-statement char


【解决方案1】:

如评论中所述,最好将所有数组放入一个大数组中。如果你坚持调用一个特定的数组,你可以这样写:

 for ii=45:58
     a=eval(['Book' num2str(ii)]); % 
     % Procedure to be performed on a
 end

但我看到的任何地方都尽量避免eval...

【讨论】:

  • 感谢这项工作。但我认为我们可能需要一个 IF 语句,甚至这个解决方案加上一个 IF 语句。原因是,我需要用else 清楚地指定一些东西。如果没有,即使选择Book05,我的程序也会执行,即使它应该只在 Book45-58 上执行。感谢您的帮助。
  • @div 这样应该不成问题。只需遍历整个范围并使用基于索引的 if 语句。
  • @JHBonarius。谢谢,但这正是我的问题首先要解决的问题,但实际上该怎么做呢?
  • @Div 我写了一个答案,但我不明白“即使选择 Book05,我的程序也会执行,即使它应该只在 Book45-58 上执行”Book05 调用该过程。如果是这样,你做错了什么。
【解决方案2】:

我只是将评论放在答案中,所以我可以编写一些代码。我昨天实际上丢失了我的 matlab 许可证,所以无法测试它。

for i = 1:[largest book number]
    book = eval(['Book' num2str(i)]);
    if i >= 45 && i <= 58
        % procedure for book45 until and including book58
    else
        % procedure for other books
    end
end

恕我直言,不使用eval 的唯一原因是它很慢(并且可能容易出错),但在这种情况下,这不是问题。 但是,您可以将所有书籍放在一个单元格数组中并删除eval,而不是拥有所有这些单独的数组。

编辑:但现在我读到您有“Book01-44 或 Book59-60 上没有程序”。如果else语句为空,那么dpdp的回答就完全足够了。

【讨论】:

  • 如果我身边的某个地方有问题,我深表歉意。谢谢您的帮助!我仍然不知道我做错了什么?我提出了一个新问题,希望能提供更多关于我的障碍可能在哪里的信息。请好心人看看:stackoverflow.com/questions/65643656/…
  • @Div 抱歉,我昨天真的丢了许可证,所以无法测试任何代码。 (切换到 python...)
猜你喜欢
  • 2013-09-02
  • 2016-04-08
  • 1970-01-01
  • 2018-04-16
  • 2021-10-24
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
相关资源
最近更新 更多