#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});