Znajdź ciąg w tablicy komórek z elementami różnych typów
Mam funkcję, która przyjmuje zmienne argumenty. Argumenty te są parami parametr-wartość, więcvarargin
jest tablicą komórek, w której każdy nieparzysty element jest łańcuchem (parametrem), ale elementy indeksowane parzysto mogą być łańcuchem, liczbą lub tablicą komórek ciągów. Chcę znaleźć indeks określonego ciągu wvarargin
. Mam działające rozwiązanie, ale używaarrayfun
dwa razy; czy istnieje jakiś czystszy / szybszy / bardziej skuteczny sposób znalezienia ciągu w takiej tablicy komórek? Powstałyindex
zostanie użyty do usunięcia tego elementu i następującego elementuvarargin
. Chciałbym zminimalizować tworzenie nowych zmiennych.
str_to_find = 'paramX'
finds = arrayfun(@(i) strfind(varargin{i},str_to_find), 1:length(varargin), 'UniformOutput', 0);
finds2 = arrayfun(@(i) ~iscell(finds{i}) && ~isempty(finds{i}), 1:length(finds));
index = find(finds2==1);
varargin(index)=[];
varargin(index)=[];
Danyvarargin
jest{'paramA', 'valueA', 'paramB', 9, 'paramX', {'z','x','c'}
, następniefinds
jest[] [] [] [] [1] {1x3 cell}
, finds2
jest0 0 0 0 1 0
, iindex
jest5
. Więc moje rozwiązanie robi to, czego potrzebuję, ale wydaje się po prostu brzydkie. Po prostu użyłbymfinds2
(tj. nie twórzindex
), aby usunąć ten element zvarargin
, ale muszę też usunąć ten, który jest po nim.