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