没有正确排序的时间戳列表

时间:2018-02-06 02:26:41

标签: sorting elixir phoenix-framework

Sorted list of time stamps

我有一个地图列表,每个地图都有一个键,表示" inserted_at"项目在我的数据库中插入的时间。我想按降序对此列表进行排序,以便首先显示最新的项目。我以为我有它,但是当因为某种原因仔细观察时,第二和第三个元素应该被交换,以及第五和第六个元素。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

那是因为你正在比较Elixir中的NaiveDateTime

您应该使用compare method代替==, >, <

例如Enum.sort(z, &(NaiveDateTime.compare(&1, &2)==:gt ))

答案 1 :(得分:1)

根据下面Elixir v10的发行说明,应本机修复该问题。

Elixir v1.10通过引入:asc和:desc快捷方式简化了排序功能:

iex> Enum.sort(["banana", "apple", "pineapple"], :asc)
["apple", "banana", "pineapple"]
iex> Enum.sort(["banana", "apple", "pineapple"], :desc)
["pineapple", "banana", "apple"]

以及增加传递模块执行语义比较的可能性。例如,要对日期进行排序,现在只需要传递Date模块或什至{:desc,Date}即可进行降序语义排序:

iex> Enum.sort([~D[2019-12-31], ~D[2020-01-01]], Date)
[~D[2019-12-31], ~D[2020-01-01]]
iex> Enum.sort([~D[2019-12-31], ~D[2020-01-01]], {:desc, Date})
[~D[2020-01-01], ~D[2019-12-31]]

这些API的改进使代码更简洁易读,并且还被添加到Enum.sort_by,Enum.min_by,Enum.max_by和朋友中。

答案 2 :(得分:-3)

默认情况下,地图&#39;没有提供排序顺序&#39;。不确定我在看什么或者用什么语言。在Java中你会使用这种类型的集合:http://tutorials.jenkov.com/java-collections/sortedmap.html