在没有循环的结构中访问数据

sie*_*gel 2 matlab struct anonymous-function

我有一组字符串vals,例如:

vals = {'AD', 'BC'}
Run Code Online (Sandbox Code Playgroud)

我还有一个结构info,其中的结构嵌套在对应于数组中元素的字段中vals(在本例中为'AD'和'BC'),每个结构依次在一个名为的字段中存储一个数字lastcontract.

我可以使用for循环来提取lastcontract每个vals这样的:

for index = 1:length(vals)
    info.(vals{index}).lastcontract
end
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想找到一种没有循环的方法,但我没有运气.我试过了:

info.(vals{1:2}).lastcontract
Run Code Online (Sandbox Code Playgroud)

没有成功.我认为arrayfun可能是合适的方式,但我无法弄清楚正确的语法.

Eit*_*n T 5

这里实际上可以在没有显式循环(也没有arrayfun/ cellfun)的情况下进行管理:

C = struct2cell(info);                  %// Convert to cell array
idx = ismember(fieldnames(info), vals); %// Find fields
C = [C{idx}];                           %// Flatten to structure array
result = [C.lastcontract];              %// Extract values
Run Code Online (Sandbox Code Playgroud)

PS比
cellfun这更合适arrayfun,因为你迭代vals(一个单元格数组).为了实践起见,这里有一个解决方案cellfun:

result = cellfun(@(x)info.(x).lastcontract, vals);
Run Code Online (Sandbox Code Playgroud)