gpt4 book ai didi

Elixir中的日期排序列表

转载 作者:行者123 更新时间:2023-12-04 05:29:03 24 4
gpt4 key购买 nike

我整理了一个小脚本来帮助我进行伤害恢复过程。它输出了我期望的结果,但是日期似乎没有按照我期望的那样排序-看起来按月/日排序是可行的,但不是按年份排序。如果仅排序日期列表而不使用结构,则结果相同。

旁注,使用https://github.com/lau/calendar填充我的日期范围。

defmodule Phase do
defstruct day: "", weight: ""
end

defmodule Recovery do
alias Calendar.Date

def phases(start_date, end_date, start_weight, increase_by) do
# Get the range of dates
date_range = Date.days_after_until(start_date, end_date, true) |> Enum.to_list

# build all phases, starting at day 0
values = do_phases(date_range, [], start_weight, increase_by)
Enum.sort_by(values, &(&1.day))
end

defp do_phases([], recovery_plan, _weight, _increase_by), do: recovery_plan
defp do_phases([head | tail], recovery_plan, weight, increase_by) do
v = [%Phase{day: head, weight: weight} | recovery_plan]
do_phases(tail, v, weight + increase_by, increase_by)
end
end

在iex中运行将输出以下内容:
iex(18)> d1 = Date.from_erl! {2016, 12, 29}
iex(19)> d2 = Date.from_erl! {2017, 1, 19}
iex(24)> Recovery.phases(d1, d2, 30, 5)
[%Phase{day: ~D[2017-01-01], weight: 45},
%Phase{day: ~D[2017-01-02], weight: 50},
%Phase{day: ~D[2017-01-03], weight: 55},
%Phase{day: ~D[2017-01-04], weight: 60},
%Phase{day: ~D[2017-01-05], weight: 65},
%Phase{day: ~D[2017-01-06], weight: 70},
%Phase{day: ~D[2017-01-07], weight: 75},
%Phase{day: ~D[2017-01-08], weight: 80},
%Phase{day: ~D[2017-01-09], weight: 85},
%Phase{day: ~D[2017-01-10], weight: 90},
%Phase{day: ~D[2017-01-11], weight: 95},
%Phase{day: ~D[2017-01-12], weight: 100},
%Phase{day: ~D[2017-01-13], weight: 105},
%Phase{day: ~D[2017-01-14], weight: 110},
%Phase{day: ~D[2017-01-15], weight: 115},
%Phase{day: ~D[2017-01-16], weight: 120},
%Phase{day: ~D[2017-01-17], weight: 125},
%Phase{day: ~D[2017-01-18], weight: 130},
%Phase{day: ~D[2017-01-19], weight: 135},
%Phase{day: ~D[2016-12-29], weight: 30},
%Phase{day: ~D[2016-12-30], weight: 35},
%Phase{day: ~D[2016-12-31], weight: 40}]

最佳答案

似乎您正在使用的库中的日期结构看起来像这样:%Date{day: 25, month: 12, year: 2014}。在Elixir中,按字段的字母顺序通过结构的内容对结构进行比较。在这种情况下,最重要的是day,然后是monthyear-与您要查找的相反。

您可以尝试将Enum.sort_by(values, &(&1.day))更改为Enum.sort_by(values, &(Date.to_erl(&1.day)))。这会将%Date{}结构转换为应该按预期排序的Erlang元组。

关于Elixir中的日期排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41655852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com