Compose-2025:OMLのセルと構造体

Tutorial Level: Intermediate

このチュートリアルでは、以下の操作方法について説明します:
  • セルを作成する。
  • セルの要素を変更する。
  • 構造体を作成する。
  • 構造体を変更する。
  • 構造体をセルに変換する。
  • セルを構造体に変換する。

セルの作成

セルは、数字や文字以外も含むことができるという点で行列とは異なります。複素数、文字列、行列のほか、他のセルを保持することもできます。
  1. Editor windowで、新しいOMLスクリプトに次の行を入力します。
    a = {[1,2;3,4],6-2i;'hello', [0,0,0]; false,{'I''m another cell'}}
    これにより、各セルに以下の値が保持されます。
    • a (1,1):行列[1,2;3,4]
    • a (1,2):複素数6-2i
    • a (2,1):文字列'hello'
    • a (2,2):ベクトル[0,0,0]
    • a(3,1):ブール型のfalse
    • a(3,2):1つの文字列要素‘I’m another cell’のみを保持した他のセル
  2. 実行をクリックすると次の出力が得られます。

セルの要素の変更

作成済みのセルの要素を変更するには、その要素を参照して目的の値を代入し直します。
  1. 特定の要素を参照するにはa{x,y}を使用します。aはセルの名前、xは行、yは列を表します。a{2,1}の要素を変更するには、次を追加します。
    a{2,1} = [5,6;7,8]
  2. 実行をクリックすると次の結果が得られます。

    この例では、[2,1]の要素が文字列'hello'から行列[5,6;7,8]に変更されたことがわかります。

構造体の作成

構造体は、セルに類似のデータ型です。特定のデータを参照するには、セルでは数字のインデックスを使用しますが、構造体では文字列を使用します。これらの文字列は‘フィールド’というエンティティを参照します。各フィールドには任意のデータ型の値が保持されます。フィールドは有効な識別子であることが必要です。
  1. Editor windowで、新しいOMLスクリプトに次の内容を入力します。
    student.name = ‘Bob’;      
    student.age = 16;      
    student.id = 8051

    次のようにstruct()を使用して、同様の代入操作を実行することもできます。

    student = struct(‘name’,’Bob’,’age’,16,’id’, 8051)

    これにより、年齢、ID、名前を3つのフィールドとする構造体が作成されます。これらのフィールドに相当する値は、それぞれ168051Bobです。

  2. 実行をクリックするとOMLコマンドウィンドウに次の出力が得られます。

    Variableブラウザで、studentの前に表示されている+記号をクリックすると次のように構造体が展開され、そのフィールドと値を確認できます。

構造体の変更

組み込み関数のsetfieldrmfieldを使用すると、既存の構造体への新規フィールドの追加や、構造体からのフィールドの削除が可能です。
  1. student構造体に新規フィールドとしてscoreを追加するには、次のコマンドを使用します。
    student.score = ‘A’

    または、次のように指定します。

    setfield(student,’score’,’A’)

    どちらの方法でも次の結果が返されます。

  2. 既存の構造体からフィールドを削除するには、rmfield関数を使用する必要があります。例えば、student構造体からageフィールドを削除するには、次のコマンドを使用します。
    rmfield(student,’age’)

    次の結果が返されます。

構造体からセルへの変換

組み込み関数struct2cellを呼び出すことで、構造体を容易にセルに変換できます。元の構造体のフィールドは、次のように数字のインデックスに変わります。
student.name = 'Bob';
student.age = 18;
student.id = 8015
% transfer a struct to a cell
struct2cell(student)

次の結果が返されます。

セルから構造体への変換

cell2structを使用してセルを構造体に変換できます。構造体にはフィールド名が必要なので、フィールド名を決めてから変換する必要があります。次に例を示します。
Cell = {'Bob','Lily','Emma';20,18,25;8051,8052,8053};
Fields = {'name','age','id'};
Struct = cell2struct(Cell,Fields)

このスクリプトでは、名前、年齢、IDの各フィールド名を持つ構造体にセルを変換します。

Variableブラウザで、構造体の前に表示されている+記号をクリックすると構造体が展開されます。Variableブラウザの表示は次のようになります。