Finden Sie eine Zeichenfolge in einem Zellenarray mit Elementen unterschiedlichen Typs
Ich habe eine Funktion, die verschiedene Argumente akzeptiert. Diese Argumente sind also Parameter-Wert-Paarevarargin
ist ein Zellenarray, in dem jedes ungerade indizierte Element eine Zeichenfolge (der Parameter) ist, die geraden indizierten Elemente jedoch eine Zeichenfolge, eine Zahl oder ein Zellenarray von Zeichenfolgen sein können. Ich möchte den Index einer bestimmten Zeichenfolge in findenvarargin
. Ich habe eine funktionierende Lösung, aber es nutztarrayfun
zweimal; Gibt es eine sauberere / schnellere / effektivere Möglichkeit, eine Zeichenfolge in einem solchen Zellenarray zu finden? Das resultierendeindex
wird verwendet, um dieses und das folgende Element von zu entfernenvarargin
. Ich möchte die Erstellung neuer Variablen minimieren.
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)=[];
Gegebenvarargin
ist{'paramA', 'valueA', 'paramB', 9, 'paramX', {'z','x','c'}
, dannfinds
ist[] [] [] [] [1] {1x3 cell}
, finds2
ist0 0 0 0 1 0
, undindex
ist5
. Meine Lösung macht also das, was ich brauche, aber sie scheint nur hässlich zu sein. Ich würde nur verwendenfinds2
(d. h. nicht erstellenindex
), um dieses Element von zu löschenvarargin
, aber ich muss auch den nachher entfernen.