2016-09-28 2 views
0

Этот вопрос связан с Does Index Using a Logical Expression work for strings?зЬгстр работает для таблицы, созданной {}, но не []

я нашел, когда я создал таблицу [] и {}. Это ведет себя по-другому. Кажется, strcmp работает только для таблиц, созданных {}. Как сделать то же самое для таблиц, созданных с помощью []?

>> T1 = table(['MM';'FF';'MM']) 

T1 = 

Var1 
____ 

MM 
FF 
MM 

>> T2 = table({'MM';'FF';'MM'}) 

T2 = 

Var1 
____ 

'MM' 
'FF' 
'MM' 

>> strcmp(T1.Var1, 'MM') 

ans = 

0 

Поскольку T1.Var1 - это массив ячеек, я думаю, что приведенная выше команда должна возвращать массив значений, как показано ниже.

>> strcmp(T2.Var1, 'MM') 

ans = 

1 
0 
1 

>> size(T1.Var1) 

ans = 

3  2 

>> size(T2.Var1) 

ans = 

3  1 

>> T1.Var1 == 'MM' 
Error using == 
Matrix dimensions must agree. 

>> T2.Var1 == 'MM' 
Undefined operator '==' for input arguments of type 'cell'. 

ответ

1

Прежде всего, старайтесь избегать 2-х символьных массивов. Всякий раз, когда вы можете, используйте ячейки массивов вместо того, чтобы быть свободным от многих ограничений многомерных массивов символов. Ограничения, такие как:

T1 = table(['M';'F';'MM']) 
Dimensions of matrices being concatenated are not consistent. 

Теперь я возвращаюсь к вашему вопросу: Вы можете сначала преобразовать таблицу T1 в ячейку массива, а затем использовать strcmp.

strcmp(table2cell(T1), 'MM') 

ans = 

    1 
    0 
    1 
+0

Если 2d массивы char ограничены, почему MATLAB все еще допускает это? Является ли он более эффективным, чем клеточные массивы символов? –

+0

Это позволяет, потому что строка является матрицей символов 2d (1xN): 'str = ['a', 'p', 'p', 'l', 'e']'. – DVarga

+1

@JoeC Да, обычные массивы (матрицы или многомерные), как правило, более эффективны, чем массивы ячеек. Но вы не можете создавать так называемые «зубчатые» массивы. Ячеистые массивы более гибкие –

Смежные вопросы