4

構造体の配列があり、すべての空の属性をNaNに設定したいと思います。

structArray = 
29x1 struct array with fields:
    value
    id

空の場合、すべてのstruct.value属性をNaNに設定するにはどうすればよいですか?

それらが空の場合、変換[structArray.value]は空の要素を省略します。

4

2 に答える 2

6

これを考えると:

x(29).id = [];
x(29).value = [];

.idこのようにすべてのフィールドの値を設定できます

[x.value] = deal(nan);

値の特定のサブセットのみを設定するには、設定する値のマスクを定義し、それを割り当てステートメントで使用します。

maskEmptyId = arrayfun(  @(a)isempty(a.id),  x  );
[x(maskEmptyId).id] = deal(nan);
于 2013-01-15T16:32:17.497 に答える
0

@Pursuitが説明したように、空のフィールドをNaNに置き換える優れた方法があります

ただし、別のアプローチにも興味があるかもしれません。

後から交換する代わりに、そもそも空のスポットが発生するのを防ぐことができるかもしれません。何も割り当てられていないために空であると仮定すると、NaNを使用して構造体を初期化するだけで済みます。

例えば:

structArray = struct ('id',[],'value',NaN)

structArrayに何かを割り当てる前にこれを呼び出すと、値フィールドがNaNで初期化されますが、IDは空に初期化されます。

于 2013-01-15T17:13:59.107 に答える