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ここでは よりも適切です。練習のために、次のソリューションを使用します。arrayfunvalscellfun

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