【问题标题】:For loop to extract info from a structure doesn't work?For循环从结构中提取信息不起作用?
【发布时间】:2010-05-13 20:14:58
【问题描述】:

我在matlab中有一个值为<1x1 struct>.的结构,它的名字是figurelist。 在该结构中,有一个名为images 的字段。内部图片,我有 25 张图片,名称为 img1, img2, img3, ..... , img25.

现在我做了一个 for 循环来提取这些图像,我基本上做到了:

 For K=1:25
     image(figurelist.images.imgK)
     PAUSE(0.25)
 End

不幸的是,这不起作用。我收到一条错误消息:

??? Reference to non-existent field 'imgK'.

是否可以使用循环从结构中提取此类信息?还是我做错了什么? 谢谢。

【问题讨论】:

  • gnovice 的解决方案似乎有效,但我很好奇您为什么将变量命名为 img[1,2,3] 而不是将它们存储在数组中。后者将是一个更具可扩展性和优雅的解决方案。
  • 好吧,我得到了这个结构,我应该按照它的方式“处理它”并找到一种方法来提取数据。

标签: matlab loops for-loop


【解决方案1】:

你必须这样做:

for K=1:25
  image(figurelist.images.(['img' int2str(K)]))
  pause(0.25)
end

由于字段名称是循环变量的函数,因此您必须为字段名称构造一个字符串。函数INT2STR 将循环变量K 的值转换为字符串,然后将其附加到'img' 以创建字段名称的字符串。然后dynamic field reference syntax (.( )) 用于使用该字符串访问字段值。

可以在Loren's blogDoug's blog 上找到使用动态字段名称的几个很好的示例。

【讨论】:

  • 感谢您解决了问题(我必须等待 10 分钟才能接受)...您能解释一下您做了什么吗?您将整数转换为 K 的字符串。为什么?所以它可以将其读取为一个值而不是一个字符?或者什么
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2013-12-31
    • 2015-01-12
    • 2012-02-28
    相关资源
    最近更新 更多