Table.Properties.RowNames与字符串的单元格数组不同

时间:2015-12-08 14:59:39

标签: matlab

Table.Properties.RowNames似乎与字符串的单元格数组的行为不同,即使它显然是什么。我可以通过将字符串数组分配给变量来获取字符串数组的行为。想知道对此的解释是什么......

var headers = [];
$('table.report thead > tr > th').each(function($i, obj) { //or <td> instead of <th>
    headers.push($(obj).text());
});

var data = [];
$('table.report tbody > tr').each(function($i, tr) {
    var row = [];
    $(tr).find('th').each(function($h, td) {
        row[headers[$h]] = td.text();
    });

    data.push(row);
});

var json = JSON.stringify(data);

1 个答案:

答案 0 :(得分:0)

我认为答案是因为它不是真正的字符串单元格数组,而是以逗号分隔的列表:

>> x=array2table( ...
            ones(3), 'RowNames', {'Row1','RowRow2','RowRowRow3'} )
x =               Var1    Var2    Var3
                  ____    ____    ____
    Row1          1       1       1   
    RowRow2       1       1       1   
    RowRowRow3    1       1       1   

>> x.Properties.RowNames{:}
ans = Row1

>> [a,b,c]=x.Properties.RowNames{:}
a = Row1
b = RowRow2
c = RowRowRow3

值得注意的是x.Properties.RowNames {:}与变量&#34; a&#34;之间的行为差​​异。在原帖中:

a=x.Properties.RowNames

在我的特定应用程序中,这意味着我需要在使用布尔矢量掩码提取元素之前将x.Properties.RowNames分配给外部变量。如果我不这样做,则赋值的左侧将根据布尔掩码的输出参数数量而变化,例如:

>> [a,b]=x.Properties.RowNames{[true false true]}
a = Row1
b = RowRowRow3

就像一个启发点,我发现这是一个有趣的提醒,即使x.Properties.RowNames是一个单元格的列数组,布尔向量可以是水平的或垂直的(它不重要) )。

用户&#34; excaza&#34;提醒我之间的差异

x.Properties.RowNames{:}

a=x.Properties.RowNames
a{:}
通过使用圆括号索引可以避免

以保留数据的字符串数组类型:

>> x.Properties.RowNames(:)
ans = 'Row1'
      'RowRow2'
      'RowRowRow3'

>> a=x.Properties.RowNames
a = 'Row1'
    'RowRow2'
    'RowRowRow3'

>> a(:)
ans = 'Row1'
      'RowRow2'
      'RowRowRow3'

我必须承认,我最初试图避免这种直接解决方案,以避免显示数据中的单引号分隔符,但这是避免上述花括号差异的一种方法。