访问深度嵌套在结构数组中的元胞数组的值

Access Values of Cell Array deeply nested within Structure Array

我有一个嵌套的 structure_array/cell_array/structure_array 字符值,这是网络查询的结果,returns 一个转换的 JSON 对象,我需要的数值可以这样循环访问:

for ix = 1 : size( S.orderBook.buckets , 2 )
 if ( str2double( S.orderBook.buckets{ ix }.price ) >= str2double( S.orderBook.price ) )
  mid_ix = ix ;  
  break ;
 endif
endfor

上述循环获取感兴趣区域中间单元格的索引mid_ix,并且

orderbook_begin_ix = mid_ix - 20 ; orderbook_end_ix = mid_ix + 20 ;

jj = 0 ;
for ix = orderbook_begin_ix : orderbook_end_ix
 jj = jj + 1 ;
 new_orderbook_data( 1 , jj ) = str2double( S.orderBook.buckets{ ix }.longCountPercent ) ;
endfor

第二个循环用感兴趣的值填充预初始化矩阵 new_orderbook_data。

不过,我想知道是否有 quicker/more 优雅的方法来获取这些值?目前,如上所示,我必须 运行 一个包含 "if statement" 的 "look up" for 循环以进入所需数值的范围,然后 运行 在球场区域中的第二个 for 循环以提取这些所需的值。

注意:交叉张贴在 Octave forum

我想我已经使用以下语法解决了这个问题:

prices = cellfun( @str2double , { [ S.orderBook.buckets{:} ].price } ) ;

这给了我一个矩阵 "prices",我可以在其中进一步应用矢量化代码。

解释:-

  1. { : } 将元胞数组中的价格提取到逗号中 分隔列表,
  2. 封闭的 [ ] 将此列表放入结构数组,

  3. [ ].price 仅提取价格,然后将其放回 包含最外层 { }

  4. 的元胞数组
  5. 然后通过应用 cellfun 对此价格元胞数组和

  6. 最后都赋值给了"prices"矩阵