2

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

vals = {'AD', 'BC'}

我还有一个 struct info,其内部是嵌套在与数组中的元素相对应的字段中的结构vals(在此示例中为“AD”和“BC”),每个字段依次存储一个名为lastcontract.

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

for index = 1:length(vals)
    info.(vals{index}).lastcontract
end

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

info.(vals{1:2}).lastcontract

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

4

1 回答 1

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

PS
cellfun在这里比 更合适arrayfun,因为你迭代vals(一个单元格数组)。为了练习,这里有一个解决方案cellfun

result = cellfun(@(x)info.(x).lastcontract, vals);
于 2013-08-01T17:22:45.510 回答