我有一个Modles1
大小为 (1x180) 的 matlab 结构数组,其中包含字段a
, b
, c
, ..., z
。
我想了解每个字段中有多少不同的值。IE
max(grp2idx([foo(:).a]))
如果该字段a
是双精度的,则上述方法有效。 {foo(:).a}
需要在字段 a 是字符串/字符的情况下使用。
这是我当前执行此操作的代码。我讨厌不得不使用 eval,而这本质上是一个 switch 语句。有没有更好的办法?
names = fieldnames(Models1);
for ix = 1 : numel(names)
className = eval(['class(Models1(1).',names{ix},')']);
if strcmp('double', className) || strcmp('logical',className)
eval([' values = [Models1(:).',names{ix},'];']);
elseif strcmp('char', className)
eval([' values = {Models1(:).',names{ix},'};']);
else
disp(['Unrecognized class: ', className]);
end
% this line requires the statistics toolbox.
[g, gn, gl] = grp2idx(values);
fprintf('%30s : %4d\n',names{ix},max(g));
end