Main Content

orderfields

構造体配列のフィールドの並べ替え

説明

S = orderfields(S1)S1 内のフィールドを名前別に並べ替えます。

フィールド名には文字、数字、アンダースコアだけを含めることができるため、この構文はフィールド名を ASCII 順に並べ替えます。すべての大文字はすべての小文字よりも前になります。

S = orderfields(S1,S2) は、S2 のフィールドの順序と一致するようにフィールドが並べ替えられた S1 のコピーを返します。入力構造体配列 S1S2 のフィールド名は同じでなければなりません。

S = orderfields(S1,C) は入力配列 C で指定された名前の順序と一致します。S1 のすべてのフィールド名は C に 1 回出現しなければなりません。

S = orderfields(S1,P) は置換ベクトル P で指定された順序と一致します。

S1n フィールドがある場合、P の要素は任意の順序で並べられた 1n の整数です。たとえば、S1 に 3 つのフィールドがあり、P[3 1 2] の場合、S1 の 3 番目のフィールドは出力 S の最初のフィールドです。この構文は、複数の構造体配列を同じ方法で並べ替える場合に便利です。

[S,Pout] = orderfields(___) は置換ベクトルも返します。Pout の要素は 1n の整数であり、フィールドの順序の変更を表す順序で並べられています。この構文では、前述の構文の入力引数のいずれかを使用できます。

すべて折りたたむ

複数のフィールドをもつ構造体を作成します。

S1 = struct('b',1,'B',2,'a',3,'A',4)
S1 = struct with fields:
    b: 1
    B: 2
    a: 3
    A: 4

そのフィールドを並べ替えます。この構文は、ASCII 順に名前でフィールドを並べ替えます。

S = orderfields(S1)
S = struct with fields:
    A: 4
    B: 2
    a: 3
    b: 1

同じフィールドをもつ 2 つの構造体を異なる順序で作成します。フィールド名は同じですが、フィールド値は異なります。

S1 = struct('b',1,'B',2,'a',3,'A',4)
S1 = struct with fields:
    b: 1
    B: 2
    a: 3
    A: 4

S2 = struct('a',0,'b',20,'B',10,'A',0)
S2 = struct with fields:
    a: 0
    b: 20
    B: 10
    A: 0

S1 のフィールドの順序は S2 のフィールドの順序と一致します。

S = orderfields(S1,S2)
S = struct with fields:
    a: 3
    b: 1
    B: 2
    A: 4

構造体を作成します。

data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
data = struct with fields:
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)
    title: 'y = sin(x)'

cell 配列に名前をリストしてフィールドを並べ替えます。

C = {'title','x','y'};
data = orderfields(data,C)
data = struct with fields:
    title: 'y = sin(x)'
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)

構造体を作成します。

data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
data = struct with fields:
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)
    title: 'y = sin(x)'

元の位置をリストして異なる順序でフィールドを並べ替えます。たとえば、出力構造体の最初のフィールドになるように 3 番目のフィールドを移動します。

P = [3 1 2];
data = orderfields(data,P)
data = struct with fields:
    title: 'y = sin(x)'
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)

構造体を作成します。

data1.x = linspace(0,2*pi);
data1.y = sin(data1.x);
data1.title = 'y = sin(x)';

関数 orderfields を使用して構造体を並べ替えます。置換ベクトル Pout に新しいフィールド順序を保存します。

[S,Pout] = orderfields(data1,{'title','x','y'})
S = struct with fields:
    title: 'y = sin(x)'
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)

Pout = 3×1

     3
     1
     2

同じフィールドをもつ 2 番目の構造体を作成します。

data2.x = data1.x;
data2.y = cos(data2.x);
data2.title = 'y = cos(x)';

Pout を使用して data2 のフィールドを並べ替えます。同じフィールド名を持つ構造体が多数ある場合は、同じ方法で Pout を使用してすべて並べ替えることができます。

S2 = orderfields(data2,Pout)
S2 = struct with fields:
    title: 'y = cos(x)'
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [1 0.9980 0.9920 0.9819 0.9679 0.9501 0.9284 0.9029 0.8738 0.8413 0.8053 0.7660 0.7237 0.6785 0.6306 0.5801 0.5272 0.4723 0.4154 0.3569 0.2969 0.2358 0.1736 0.1108 0.0476 -0.0159 -0.0792 -0.1423 -0.2048 -0.2665 -0.3271 ... ] (1x100 double)

入力引数

すべて折りたたむ

入力構造体。構造体配列として指定されます。

構造体によるフィールド順序。構造体配列として指定します。S2 には S1 と同じフィールドがありますが、異なる順序で指定されます。

名前によるフィールド順序。文字ベクトルの cell 配列、または string 配列として指定します。C の名前は S1 のフィールド名と一致しなければなりません。

数値によるフィールド順序。数値ベクトルとして指定します。数値は 1n の整数でなければなりません。nS1 のフィールドの数です。

出力引数

すべて折りたたむ

並べ替えられた構造体。構造体配列として返されます。SS1 と同じフィールドをもちますが、順序は異なる場合があります。

出力フィールドの順序。数値ベクトルとして返されます。Pout の要素は 1n の整数です。nS1 のフィールドの数です。整数の置換はフィールドの順序の変更を表します。

ヒント

  • 関数 orderfields は、最上位フィールドをのみを並べ替えます。これは、リカーシブではありません。

拡張機能

バージョン履歴

R2006a より前に導入