exponenta event banner

Массивы ячеек символьных векторов

Чтобы сохранить текст в виде символьного вектора, заключите его в одинарные кавычки. Как правило, вектор символов содержит текст, который рассматривается как отдельный фрагмент информации, например имя файла или метка для печати. Если имеется много фрагментов текста, например список имен файлов, их можно сохранить в массиве ячеек. Массив ячеек, элементами которого являются все символьные векторы, является массивом ячеек символьных векторов.

Примечание

  • С R2018b года рекомендуется использовать массивы строк для хранения текста. При создании переменных, имеющих string храните их в строковых массивах, а не в массивах ячеек. Дополнительные сведения см. в разделах Текст в строковых и символьных массивах и Обновление кода для принятия строк.

  • В то время как для описания таких массивов ячеек часто использовался массив ячеек фразы, эта фраза более не является точной, поскольку такой массив ячеек содержит векторы символов, а не строки.

Создание массива ячеек символьных векторов

Чтобы создать массив ячеек из векторов символов, используйте фигурные скобки, {}, как и при создании любого массива ячеек. Например, используйте массив ячеек символьных векторов для хранения списка имен.

C = {'Li','Sanchez','Jones','Yang','Larson'}
C = 1x5 cell
    {'Li'}    {'Sanchez'}    {'Jones'}    {'Yang'}    {'Larson'}

Векторы символов в C может иметь различную длину, поскольку массив ячеек не требует, чтобы его содержимое имело одинаковый размер. Определение длины векторов символов в C, используйте strlength функция.

L = strlength(C)
L = 1×5

     2     7     5     4     6

Доступ к векторам символов в массиве ячеек

Чтобы получить доступ к векторам символов в массиве ячеек, проиндексируйте их с помощью фигурных скобок, {}. Извлеките содержимое первой ячейки и сохраните его в виде символьного вектора.

C = {'Li','Sanchez','Jones','Yang','Larson'};
chr = C{1}
chr = 
'Li'

Назначьте другой вектор символов первой ячейке.

C{1} = 'Yang'
C = 1x5 cell
    {'Yang'}    {'Sanchez'}    {'Jones'}    {'Yang'}    {'Larson'}

Для ссылки на подмножество ячеек вместо их содержимого проиндексируйте их, используя гладкие круглые скобки.

C(1:3)
ans = 1x3 cell
    {'Yang'}    {'Sanchez'}    {'Jones'}

Хотя доступ к содержимому ячеек возможен путем индексирования, большинство функций, принимающих массивы ячеек в качестве входных данных, работают на всем массиве ячеек. Например, можно использовать strcmp для сравнения содержимого C к вектору символов. strcmp прибыль 1 где есть совпадение и 0 в противном случае.

TF = strcmp(C,'Yang')
TF = 1x5 logical array

   1   0   0   1   0

Можно суммировать TF чтобы найти количество совпадений.

num = sum(TF)
num = 2

Использовать TF в качестве логических индексов для возврата совпадений в C. При индексировании с использованием гладких круглых скобок вывод представляет собой массив ячеек, содержащий только совпадения.

M = C(TF)
M = 1x2 cell
    {'Yang'}    {'Yang'}

Преобразовать массивы ячеек в массивы строк

С R2018b года строковые массивы поддерживаются во всех продуктах MATLAB ® и MathWorks ®. Поэтому рекомендуется использовать строковые массивы вместо массивов ячеек символьных векторов. (Однако функции MATLAB, которые принимают строковые массивы в качестве входных данных, также принимают символьные векторы и массивы ячеек символьных векторов.)

Можно преобразовать массивы ячеек символьных векторов в строковые массивы. Для преобразования массива ячеек символьных векторов используйте string функция.

C = {'Li','Sanchez','Jones','Yang','Larson'}
C = 1x5 cell
    {'Li'}    {'Sanchez'}    {'Jones'}    {'Yang'}    {'Larson'}

str = string(C)
str = 1x5 string
    "Li"    "Sanchez"    "Jones"    "Yang"    "Larson"

Фактически, string функция преобразует любой массив ячеек при условии, что все содержимое может быть преобразовано в строки.

C2 = {5, 10, 'some text', datetime('today')}
C2=1×4 cell array
    {[5]}    {[10]}    {'some text'}    {[23-Mar-2021]}

str2 = string(C2)
str2 = 1x4 string
    "5"    "10"    "some text"    "23-Mar-2021"

См. также

| | | |

Связанные темы