在Mathematica中按文本日期列对数组进行排序

Tim*_*Tim 8 wolfram-mathematica

我觉得很容易.

我有一个来自CSV的混合日期,文本和数字数据的二维列表(数组).我希望能够按单列中的值对行进行排序,在本例中是一个文本格式的日期.例如:

{{1/12/2008, Bob, 123}, {28/06/2007, Alice, 456}, {19/08/2009, Charlie, 789}}

我想按日期对列表中的行进行排序(因此按Alice,Bob,Charlie的顺序排序)

到目前为止,我一直认为我可能希望DateList在我的日期列中进行映射,并将年,月,日添加到列表中,因此它变为:

{{2008, 12, 1, Bob, 123}, {2007, 6, 28, Alice, 456}}

然后我不得不做三种而不是一种,需要按年分解阵列.那似乎不对,现在我被卡住了.我知道这应该很简单,但我不能为我的生活弄清楚.任何指针赞赏.

谢谢,

蒂姆

Dr.*_*ius 11

也许这......

l = {{"1/12/2008", Bob, 123}, {"28/06/2007", Alice, 456}, 
     {"19/08/2009", Charlie, 789}}

SortBy[l, AbsoluteTime[{#[[1]], {"Day", "Month", "Year"}}] &]   
Run Code Online (Sandbox Code Playgroud)

{{"28/06/2007", Alice,   456}, 
 {"1/12/2008",  Bob,     123}, 
 {"19/08/2009", Charlie, 789}}   
Run Code Online (Sandbox Code Playgroud)

HTH

编辑

请注意,Sort []使用OrderedQ []进行比较,因此它可以比较列表.(例如,大[]不能).

因此,以下代码也有效:

Sort@(Flatten@{DateList[{#[[1]],{"Day","Month","Year"}}], #[[2]], #[[3]]} & /@ l)
Run Code Online (Sandbox Code Playgroud)

或者更优雅:

Sort@(l/.{x_String, y__} :> Flatten@{DateList[{x, {"Day", "Month", "Year"}}], y})
Run Code Online (Sandbox Code Playgroud)