Сортировать массив по столбцу текстовой даты в Mathematica - PullRequest
8 голосов
/ 11 декабря 2010

Мне кажется, что-то проще.

У меня есть двумерный список (массив) смешанных данных, текстовых и числовых данных, полученных из CSV.Я хочу иметь возможность сортировать строки по значению в одном столбце, который в данном случае является датой в текстовом формате.Например:

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

Я бы хотел отсортировать строки в списке по дате (чтобы получилось в порядке Алиса, Боб, Чарли.)

До сих пор я думал, что, возможно, захочу отобразить DateList через мой столбец даты и добавить к списку год, месяц и день, чтобы он стал:

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

Тогда мне осталось сделать три сортировки вместо одной, и мне нужно разбить массив по годам.Это не казалось правильным, и теперь я застрял.Я знаю, что это должно быть просто, но я не могу понять это.Любые указатели оценены.

Спасибо,

Тим

Ответы [ 2 ]

11 голосов
/ 11 декабря 2010

Возможно, это ...

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

SortBy[l, AbsoluteTime[{#[[1]], {"Day", "Month", "Year"}}] &]   

дает

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

HTH

Редактировать

Обратите внимание, что Sort [] сравнивает, используя OrderedQ [] , и поэтому может сравнивать списки.(Большее [], например, не может).

Итак, следующий код также работает:

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

или, возможно, более элегантно:

Sort@(l/.{x_String, y__} :> Flatten@{DateList[{x, {"Day", "Month", "Year"}}], y})
2 голосов
/ 24 марта 2011

Альтернатива второму методу Велисария:

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

lst = {DateList@{#, {"Day", "Month", "Year"}}, ##2} & @@@ lst;

Sort@lst
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...