基于字段排序结构数组
MATLAB具有一个不错的功能sortrows排序矩阵(数字或细胞)基于特定的列(s)。我经常用它当我做一些数据管理。如果你有统计工具箱,有相应的功能数据集的数组和有序数组。
有时候,我想做一个类似的行动结构数组。我希望能够根据特定的字段。为了做到这一点,它需要一些数据操作。让我们看一个例子。
一个=结构(…“名字”,{“迈克”,“豆豆”,“史蒂夫。”,“罗兰”,汪东城的,布雷特的,“赛斯”},…“年”、{2005,2001,1993,1987,2006,2005,1998},…“天”,{“我的”,“星期五”,“结婚”,“星期五”,“我的”,“我的”,“我的”})为id = 1:长度(A)流(“% d \ n”(id) disp (id))结束
= 1×7结构体数组字段:名称年第一天的名字:“迈克”:2005天:“星期一”2名:‘道’:2001天:“星期五”3名:“史蒂夫的一年:1993天:“结婚”4名:“罗兰”:1987天:“星期五”5名:“汪东城”:2006天:“星期一”6名:“布雷特”:2005天:‘我的’7名:“赛斯”:1998天:‘我的’
让我们排序的数组字段“name”。首先,您需要转换为一个单元阵列:
在远处=字段名(A);Acell = struct2cell(一个);深圳=大小(Acell)%注意,这是一个三维数组。%与P (MxN结构数组字段,大小%的转换单元阵列PxMxN
深圳= 3 1 7
一旦单元阵列,您就可以使用sortrows:
%转换为一个矩阵Acell =重塑(Acell,深圳(1),[]);% Px(麦根)%让每个字段列Acell = Acell ';%(麦根)xP%排序第一个字段“名称”Acell = sortrows (Acell, 1)
Acell = 7×3单元阵列{布雷特的}{[2005]}{‘我的’}{‘道’}{[2001]}{“星期五”}{汪东城的}{[2006]}{‘我的’}{“罗兰”}{[1987]}{“星期五”}{“迈克”}{[2005]}{‘我的’}{“塞斯”}{[1998]}{‘我的’}{史蒂夫的}{[1993]}{‘结婚’}
并将其转换回一个结构数组:
%放回原始单元阵列格式Acell =重塑(Acell”,深圳);%转换为结构体带点= cell2struct (Acell地区1);为id = 1:长度(带点)流(“% d \ n”id) disp(带点(id))结束
1名:“布雷特”:2005天:“星期一”2名:‘道’:2001天:“星期五”3名:“汪东城”:2006天:“星期一”4名:“罗兰”:1987天:“星期五”5名:“迈克”:2005天:“星期一”6名:“赛斯”:1998天:‘我的’7名:“史蒂夫的一年:1993天:“结婚”
更简单的方法
你想要一个更简单的方法吗?只使用杰克的nestedSortStruct:
B = nestedSortStruct (A,“名字”);isequal (B,带点)
ans =逻辑1
你甚至可以由多个字段排序。例如,让我们按“年”排序,然后通过“名字”:
C = nestedSortStruct (A, {“年”,“名字”});为id = 1:长度(C)流(“% d \ n”id) disp (C (id))结束
1名:“罗兰”:1987天:“星期五”2名:“史蒂夫的一年:1993天:“结婚”3名:“赛斯”:1998天:‘我的’4名称:‘道’:2001天:“星期五”5名:“布雷特”:2005天:“星期一”6名:“迈克”:2005天:‘我的’7名:“汪东城”:2006天:‘我的’
杰克,谢谢你这个条目。我的一个建议就是帮助文本中包括几个例子代码。
编辑(R2017a)
从R2017a,您可以使用sortrows与表清洁、高效地完成一个类似的任务。
Atable = struct2table(一个);Atable_sorted = sortrows (Atable,“名字”)
Atable_sorted = 7×3表名____年____天____{布雷特的}2005{‘我的’}{‘道’}2001{“星期五”}{汪东城的}2006{‘我的’}{“罗兰”}1987{“星期五”}{“迈克”}2005{‘我的’}{“塞斯”}1998{‘我的’}{史蒂夫的}1993{‘结婚’}
评论
- 类别:
- 选择
评论
留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。