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: [1x100 double]
        y: [1x100 double]
    title: 'y = sin(x)'

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

C = {'title','x','y'};
data = orderfields(data,C)
data = struct with fields:
    title: 'y = sin(x)'
        x: [1x100 double]
        y: [1x100 double]

構造体を作成します。

data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
data = struct with fields:
        x: [1x100 double]
        y: [1x100 double]
    title: 'y = sin(x)'

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

P = [3 1 2];
data = orderfields(data,P)
data = struct with fields:
    title: 'y = sin(x)'
        x: [1x100 double]
        y: [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: [1x100 double]
        y: [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: [1x100 double]
        y: [1x100 double]

入力引数

すべて折りたたむ

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

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

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

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

出力引数

すべて折りたたむ

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

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

ヒント

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

R2006a より前に導入