Meine Frage lässt sich leicht wie folgt zusammenfassen: "Warum funktioniert Folgendes nicht?"
teststruct = struct('a',3,'b',5,'c',9)
fields = fieldnames(teststruct)
for i=1:numel(fields)
fields(i)
teststruct.(fields(i))
end
Ausgabe:
ans = 'a'
??? Argument to dynamic structure reference must evaluate to a valid field name.
Zumal teststruct.('a')
funktioniert da . Und fields(i)
druckt aus ans = 'a'
.
Ich kann es nicht verstehen.
matlab
matlab-struct
noio
quelle
quelle
Da
fields
oderfns
sind Zellenarrays, müssen Sie mit geschweiften Klammern indizieren,{}
um auf den Inhalt der Zelle, dh die Zeichenfolge, zuzugreifen.Beachten Sie, dass Sie anstelle einer Schleife auch eine Nummer
fields
durchlaufen können, indem Sie eine übersichtliche Matlab-Funktion verwenden, mit der Sie jedes Array durchlaufen können. Die Iterationsvariable nimmt den Wert jeder Spalte des Arrays an.teststruct = struct('a',3,'b',5,'c',9) fields = fieldnames(teststruct) for fn=fields' fn %# since fn is a 1-by-1 cell array, you still need to index into it, unfortunately teststruct.(fn{1}) end
quelle
Ihr fns ist ein cellstr-Array. Sie müssen mit {} anstelle von () indizieren, um die einzelne Zeichenfolge als Zeichen auszugeben.
fns{i} teststruct.(fns{i})
Wenn Sie mit () darauf indizieren, wird ein 1-langes cellstr-Array zurückgegeben, das nicht das gleiche Format wie das char-Array hat, das die dynamische Feldreferenz ". (Name)" benötigt. Die Formatierung, insbesondere in der Anzeigeausgabe, kann verwirrend sein. Versuchen Sie dies, um den Unterschied zu erkennen.
name_as_char = 'a' name_as_cellstr = {'a'}
quelle
Sie können die für jede Toolbox unter http://www.mathworks.com/matlabcentral/fileexchange/48729-for-each verwenden .
>> signal signal = sin: {{1x1x25 cell} {1x1x25 cell}} cos: {{1x1x25 cell} {1x1x25 cell}} >> each(fieldnames(signal)) ans = CellIterator with properties: NumberOfIterations: 2.0000e+000
Verwendung:
for bridge = each(fieldnames(signal)) signal.(bridge) = rand(10); end
Ich mag es sehr. Dank geht natürlich an Jeremy Hughes, der die Toolbox entwickelt hat.
quelle