在Matlab中创建更复杂的数据结构?

在Matlab中创建更复杂的数据结构?,matlab,data-structures,structure,Matlab,Data Structures,Structure,我需要一些在Matlab中创建数据结构的帮助。到目前为止,我需要以下几点: string1 value1 string2 value2 string3 value3 等等。我为此使用了一个结构: mystruct = struct('mystrings', {}, 'myvalues', {}); 现在除了字符串和值之外,我还需要为字符串-值对分配几个数组(列向量,仅包含数字)。它可以是不同的,有多少数组被分配给一个字符串-值对,例如 string1 value1 [1;2] [1;3] s

我需要一些在Matlab中创建数据结构的帮助。到目前为止,我需要以下几点:

string1 value1
string2 value2
string3 value3
等等。我为此使用了一个结构:

mystruct = struct('mystrings', {}, 'myvalues', {});
现在除了字符串和值之外,我还需要为字符串-值对分配几个数组(列向量,仅包含数字)。它可以是不同的,有多少数组被分配给一个字符串-值对,例如

string1 value1 [1;2] [1;3]
string2 value2 [9;10]
string3 value3 [3;4] [2;9] [0;3]

我不知道如何创建这样的数据结构。如果一个结构现在是错误的数据结构,那么对我来说,去掉它可能根本不是问题。不过,我需要关于创建新数据结构的帮助。感谢您的帮助:-)

在考虑“正确”的数据结构时,总是有很多选择。一些选择:

  • 您可以为结构的每个字段分配一个单元格数组。
    你可以这样写:

    data.field1{1} = 'a string';
    data.field1{2} = [1 2 3 4];
    data.field1{3} = [5:2:10];
    data.field2{1} = 'another string'
    
    allValueInACellArray = data.field1;
    onlyTheThirdValue = data.field1{3};
    
    data.field1.name = 'some name';
    data.field1.firstarray = [1 2 3 4];
    data.field1.secondarray = [5:2:10];
    data.field2.name = 'another name';
    
    justTheFirstName = data.field1.name;
    onlyTheSecondArray = data.field1.firstArray;
    
    你会这样读:

    data.field1{1} = 'a string';
    data.field1{2} = [1 2 3 4];
    data.field1{3} = [5:2:10];
    data.field2{1} = 'another string'
    
    allValueInACellArray = data.field1;
    onlyTheThirdValue = data.field1{3};
    
    data.field1.name = 'some name';
    data.field1.firstarray = [1 2 3 4];
    data.field1.secondarray = [5:2:10];
    data.field2.name = 'another name';
    
    justTheFirstName = data.field1.name;
    onlyTheSecondArray = data.field1.firstArray;
    
  • 您可以使用嵌套结构。
    然后一个字看起来像这样:

    data.field1{1} = 'a string';
    data.field1{2} = [1 2 3 4];
    data.field1{3} = [5:2:10];
    data.field2{1} = 'another string'
    
    allValueInACellArray = data.field1;
    onlyTheThirdValue = data.field1{3};
    
    data.field1.name = 'some name';
    data.field1.firstarray = [1 2 3 4];
    data.field1.secondarray = [5:2:10];
    data.field2.name = 'another name';
    
    justTheFirstName = data.field1.name;
    onlyTheSecondArray = data.field1.firstArray;
    
    读起来像这样:

    data.field1{1} = 'a string';
    data.field1{2} = [1 2 3 4];
    data.field1{3} = [5:2:10];
    data.field2{1} = 'another string'
    
    allValueInACellArray = data.field1;
    onlyTheThirdValue = data.field1{3};
    
    data.field1.name = 'some name';
    data.field1.firstarray = [1 2 3 4];
    data.field1.secondarray = [5:2:10];
    data.field2.name = 'another name';
    
    justTheFirstName = data.field1.name;
    onlyTheSecondArray = data.field1.firstArray;
    
  • 我经常使用的另一种结构是结构数组。
    将其与单元格值字段相结合,写操作如下所示:

    data(1).name = 'some name';
    data(1).arrays = {[1 2 3 4]  5:2:10};
    data(2).name = 'another name';
    data(2).arrays = {[5 6 7 8]  6:3:12};
    

  • 对此通常没有正确的答案。对于小程序来说,这并不重要,你应该选择你觉得最自然的。对于性能有限的应用程序,您需要考虑诸如高效内存分配之类的事情,以及以通常需要访问的方式快速访问数据。显然,MATLAB不是一种设计用于创建表达性数据结构的语言。