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)
| 归档时间: |
|
| 查看次数: |
970 次 |
| 最近记录: |