我有一个包含位置(-x -y coord。)和点类型信息的结构:
mystr(1).type = 'type2';
mystr(1).location = [5 7]; % [x y] = [5 7]
mystr(2).type = 'type1';
mystr(2).location = [2 8]; % [x y] = [2 8]
我至少有100分。我想先按照-y坐标排序mystr位置,按升序排序第二个-x坐标。最后,我希望mystr(1)显示具有最低位置及其类型的点。另外,我希望mystr(end)显示具有最高位置及其类型的点。
我的代码排序位置如下。
mystr(1).location = [5 7]; mystr(1).type = 'type2';
mystr(2).location = [2 8]; mystr(2).type = 'type1';
mystr(3).location = [3 9]; mystr(3).type = 'type1';
mystr(4).location = [4 2]; mystr(4).type = 'type2';
allpoints = [];
for i = 1:4
allpoints = [allpoints; mystr(i).location];
end
[~,in] = sort(allpoints(:,2),1,'ascend');
[r,c] = size(allpoints);
allpoints = mat2cell(allpoints,r,2*ones(1));
allpoints = allpoints{1,1}(in,:)
[~,in] = sort(allpoints(:,1),1,'ascend');
[r,c] = size(allpoints);
allpoints = mat2cell(allpoints,r,2*ones(1));
allpoints = allpoints{1,1}(in,:)
for i = 1:4
mystr(i).location = allpoints(i,:)
end
我不能做类型,但位置将是:
mystr(1).location = [2 8];
mystr(2).location = [3 9];
mystr(3).location = [4 2];
mystr(4).location = [5 7];
PS:如果有人可以缩短分拣部分,我也很高兴。我认为这是不必要的长。提前谢谢。
答案 0 :(得分:2)
如果要对值进行排序和过滤,则可能需要考虑将值存储在表中。
但是,假设您遇到结构问题,可以采取以下措施:
%# create n-by-2 array with locations
locations = cat(1,mystr.location);
%# sort ascending, so that x are sorted, and within equal x, y are sorted
[~,sortOrder] = sortrows(locations,[1 2]);
%# rearrange the structure
mystrSorted = mystr(sortOrder)
请注意,这假定location
永远不会为空;如果可能的话,你需要先用[NaN NaN]
替换空,以避免灾难性的混乱。
答案 1 :(得分:2)
这是你的答案:
[~, I] = sortrows(cat(1,mystr(:).location),[2 1]);
mynewstr = mystr(I);
最佳,