2

構造体配列のフィールドの値を置き換えたい。たとえば、次の構文ですべての 1 を 3 に置き換えたいとします。

a(1).b = 1;
a(2).b = 2;
a(3).b = 1;

a([a.b] == 1).b = 3; % This doesn't work and spits out:
% "Insufficient outputs from right hand side to satisfy comma separated
% list expansion on left hand side.  Missing [] are the most likely cause."

これには簡単な構文がありますか? このような単純な操作の見苦しい for ループは避けたいと思います。

4

2 に答える 2

5

クレジットは @Slayton に送られますが、実際にはdealを使用して値を割り当てるために同じことができます。

[a([a.b]==1).b]=deal(3)

内訳:

[a.b]

b配列のすべてのフィールドを取得しa、このコンマ区切りリストを配列に入れます。

a([a.b]==1)

論理インデックスを使用してa、制約を満たす の要素のみにインデックスを付けます。その後、上記の完全なコマンドは、 this3に従って、結果のコンマ区切りリストのすべての要素に値を割り当てます。

于 2012-11-11T22:24:32.497 に答える
1

cell表記法を使用して、配列内の各構造体のフィールドの値を取得できます。

bVals = {a.b};
bVals = cell2mat( bVals );

私の知る限り、構造体の配列に値を挿入するために同じことを行うことはできません。ループを使用する必要があります。

于 2012-11-10T19:15:48.807 に答える