Как я могу создать строковый массив значений, извлеченных из структуры в MATLAB?

#arrays #matlab #struct

#массивы #matlab #структура

Вопрос:

У меня есть структура MATLAB, в которой я хотел бы извлекать одно текстовое поле из каждой записи и помещать эти записи в строковый массив. Пример структуры может быть создан следующим образом:

 allFiles = dir(fullfile('C:UsersusernameDocuments))
  

Приведенное выше возвращает структурный массив, где каждый файл представляет собой запись с полями «имя», «папка», «дата» и т.д.
Если я вызываю allFiles.name , я получаю каждую запись имени файла в качестве отдельного ответа. Это выглядит так

 ans = 
    'exampleFile1.txt'
ans = 
    'exampleFile2.txt'
  

В качестве альтернативы, я могу вызвать [allFiles.name] , и это просто объединяет символьные массивы следующим образом

 'exampleFile1.txtexampleFile2.txt'
  

Единственное решение, которое я нашел, — это перебирать список

 filesArray = []
for k=1:length(allFiles)
    filesArray = [filesArray string(allFiles(k).name)]
end
  

и это возвращает правильный строковый массив ["exampleFile1.txt" "exampleFile2.txt"] .

Есть ли более элегантное решение для извлечения этих записей непосредственно в строковый массив без итерации?

Ответ №1:

Да, вы можете собрать все имена в массив ячеек.

 allNames = {allFiles.name};
  

Затем, чтобы превратить это в строковый массив, просто выполните

 allNames = string({allFiles.name});