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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage