无法遍历struct matlab的字段

时间:2019-03-28 14:32:17

标签: matlab

我目前正在与matlab合作,我尝试从我拥有的 struct 中提取一些数据,但似乎并不像我想象的那么容易。

structExample = 1x100000
fieldnames(structExample)

ans =

  6×1 cell array

    {'a'}
    {'b'}
    {'c'}
    {'d'}
    {'e'}
    {'f'}

我对保存在字段“ b”中的值感兴趣。 当我键入structExample.b时,它将打印出所有值,但是当我输入

values = structExample.b

它仅保存第一个值([1.2,5.33])。 'b'具有双精度值,例如

  

[1.2,5.33],1x86double,1x120double ...

我的目标是能够使用 cdfplot()
绘制它们 因此,我认为也许遍历该字段中的所有值并将它们保存在单独的数组中。但是我不知道如何遍历它,因为structExample.b仅采用第一个值。有任何想法吗?

编辑:
structExample.b(3)返回

  

期望大括号或点索引表达式的一个输出,但是   有41817个结果。

1 个答案:

答案 0 :(得分:2)

访问structure array的字段时,它将返回值comma-separated list。默认情况下,仅列表中的第一个值将分配给单个变量。如果要捕获所有这些值,则必须使用[](对于normal array)或{}(对于cell array)来收集它们。由于您要处理每种结构中不同大小的数据集,因此需要使用单元格数组:

values = {structExample.b};

因此,values{1}将包含[1.2,5.33]values{2}将包含1x86 double,依此类推。

对于要遍历结构数组的情况,必须以正确的顺序索引数组元素和字段。您应该首先对元素进行索引(从数组中为您提供单个结构元素),然后对所需的字段进行索引:

value = structExample(3).b;  % Field b of the third array element

在其他情况下,您想从结构数组中索引的元素子集中收集字段,则必须结合上面的索引和收集方案。例如:

values = {structExample([structExample.a] == 1).b};

这会将a中的所有structExample字段值收集到一个数组中,找到一个logical index等于1的位置,并用structExample索引数组该逻辑数组,然后从该子数组中收集字段b的值并将其放在单元格数组中。