Matlab:根据层次结构对单元格数组进行排序

时间:2015-12-02 07:12:37

标签: matlab sorting cell-array

我想根据单元格数组第一列中写入的层次结构对单元格数组(Nx2)进行排序。

例如:

MdlTbl={'1','VW';
'1.1', 'Golf';
'1.2', 'Passat';
'1.3', 'Polo';
'2','Mercedes';
'2.1', 'A-Klasse';
'2.1.1', 'Grün';
'2.1.2', 'Rosa';
'2.1.3', 'gelb';
'2.2', 'B-Klasse';
'2.3', 'e-Klasse';
'2.4', 'G-Klasse';
'3','Audi';
'3.1', 'A1';
'3.1.1', 'Schwarz';
'3.1.2', 'Karriert';
'3.2', 'A2';};

对于字母顺序,结果应如下所示:

SortModel = 

'1'        'Audi'    
'1.1'      'A1'      
'1.1.1'    'Karriert'
'1.1.2'    'Schwarz' 
'1.2'      'A2'      
'2'        'Mercedes'
'2.1'      'A-Klasse'
'2.1.1'    'gelb'    
'2.1.2'    'Grün'    
'2.1.3'    'Rosa'    
'2.2'      'B-Klasse'
'2.3'      'e-Klasse'
'2.4'      'G-Klasse'
'3'        'VW'
'3.1'      'Golf'    
'3.2'      'Passat'  
'3.3'      'Polo'    

排序方式(例如按字母顺序排列)并不重要。它只适用于统一的不同表格,然后将它们相互比较。 层次结构的深度以及表的长度可能不同。第2列中的名称可能会出现两次,例如'高尔夫','高尔夫'

我编写了一个非常复杂的脚本,该脚本适用于这个简单的示例,但不适用于更大的表。现在我想知道是否有一种简单的方法可以使用其中一个matlab函数吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定我是否能正确解决问题 - 但sortrows几乎可以解决您所寻找的问题:

>> sortrows(MdlTbl)

ans = 

    '1'        'VW'      
    '1.1'      'Golf'    
    '1.2'      'Passat'  
    '1.3'      'Polo'    
    '2'        'Mercedes'
    '2.1'      'A-Klasse'
    '2.1.1'    'Grün'    
    '2.1.2'    'Rosa'    
    '2.1.3'    'gelb'    
    '2.2'      'B-Klasse'
    '2.3'      'e-Klasse'
    '2.4'      'G-Klasse'
    '3'        'Audi'    
    '3.1'      'A1'      
    '3.1.1'    'Schwarz' 
    '3.1.2'    'Karriert'
    '3.2'      'A2'