我在Matlab中有一个数组StockInfo
的结构。结构StockInfo
的字段如下:
StockInfo =
Name: {10x1 cell}
Values: [10x6 double]
Return: [10x1 double]
我需要根据字段StockInfo
对Return
进行排序,以便结构中的每个数组都相应地排序。知道怎么做吗?
答案 0 :(得分:4)
正如我在上面的评论中提到的,你的问题不清楚。我认为你混淆了结构和结构数组。这post可能会有所帮助。
那就是说,这里有一个例子来说明我认为你打算做什么。
首先,我使用一些随机数据创建结构数组:
% cell array of 10 names
names = arrayfun(@(k) randsample(['A':'Z' 'a':'z' '0':'9'],k), ...
randi([5 10],[10 1]), 'UniformOutput',false);
% 10x6 matrix of values
values = rand(10,6);
% 10x1 vector of values
returns = randn(10,1);
% 10x1 structure array
StockInfo = struct('Name',names, 'Values',num2cell(values,2), ...
'Return',num2cell(returns));
创建的变量是一个结构数组:
>> StockInfo
StockInfo =
10x1 struct array with fields:
Name
Values
Return
其中每个元素都是具有以下字段的结构:
>> StockInfo(1)
ans =
Name: 'Pr3N4LTEi'
Values: [0.7342 0.1806 0.7458 0.8044 0.6838 0.1069]
Return: -0.3818
接下来可以通过“return”字段对这个struct数组进行排序(每个struct都有一个相应的标量值):
[~,ord] = sort([StockInfo.Return]);
StockInfo = StockInfo(ord);
结果是数组现在按“返回”值按升序排序:
>> [StockInfo.Return]
ans =
Columns 1 through 8
-0.3818 0.4289 -0.2991 -0.8999 0.6347 0.0675 -0.1871 0.2917
Columns 9 through 10
0.9877 0.3929
答案 1 :(得分:3)
您可以使用FileExchange函数nestedSortStruct
(link)基于字段对结构数组进行排序。
B = nestedSortStruct(A, 'Return');
答案 2 :(得分:1)
仅具有内置功能的解决方案可以是:
[~, ix] = sort(StockInfo.Return);
StockInfo = struct(...
'Name', {StockInfo.Name{ix}}, ...
'Values', StockInfo.Values(ix), ...
'Return', StockInfo.Return(ix));
如果您的Matlab较旧且不支持未使用的输出参数,请将〜替换为任何未使用的标识符。