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可能是合适的方式,但我无法弄清楚正确的语法.
这里实际上可以在没有显式循环(也没有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)