2

eg 的输出>>w = whos;返回一个结构数组。我想构造一个数组,其元素是每个结构中特定字段名称的标量。

这样做的最明显方法不会返回我想要的数组,而是分别返回每个答案。

>> w(1:2).bytes
ans =
    64
ans =
   128

我可以用循环来做,但想知道是否有更好的方法。

4

3 回答 3

10

在表达式周围加上方括号,即

[w(1:2).bytes]
于 2009-07-14T12:59:58.847 回答
6

访问结构数组的字段将作为输出返回一个逗号分隔的列表(或 CSL)。换句话说,您的示例的输出:

w(1:2).bytes

相当于输入:

64, 128

因此,您可以在任何可以使用 CSL 的地方使用输出。这里有些例子:

a = [w(1:2).bytes];         % Horizontal concatenation = [64, 128]
a = horzcat(w(1:2).bytes);  % The same as the above
a = vertcat(w(1:2).bytes);  % Vertical concatenation = [64; 128]
a = {w(1:2).bytes};         % Collects values in a cell array = {64, 128}
a = zeros(w(1:2).bytes);    % Creates a 64-by-128 matrix of zeroes
b = strcat(w.name);         % Horizontal concatenation of strings
b = strvcat(w.name);        % Vertical concatenation of strings
于 2009-07-14T14:39:39.903 回答
2

在这种情况下,使用cat更通用。假设你想对一堆字符串做同样的事情,那么 [ ] 方法将不起作用,你必须使用:

cat(1,w(1:2).class)

在上述情况下,

cat(1,w(1:2).bytes)

此外,您希望将内容保留为 MATLAB 中的列,以获得更好的性能。

于 2009-07-14T14:20:03.583 回答