将几天的列表分成几个月列表,其中包含几天列表



我有一个映射列表,其中包括日期。我不知道该列表有多长时间(可以是多年的几天)。我所知道的是,该列表按日期进行排序,并且没有重复的日期。

示例:

[
%{date: ~D[2017-01-01], y: ["x"]}, %{date: ~D[2017-01-02], y: ["x"]},
%{date: ~D[2017-01-03], y: ["x"]}, %{date: ~D[2017-01-04], y: ["x"]},
%{date: ~D[2017-01-05], y: ["x"]}, %{date: ~D[2017-01-06], y: ["x"]},
%{date: ~D[2017-01-07], y: ["x"]}, %{date: ~D[2017-01-08], y: ["x"]},
%{date: ~D[2017-01-09], y: ["x"]}, %{date: ~D[2017-01-10], y: ["x"]},
%{date: ~D[2017-01-11], y: ["x"]}, %{date: ~D[2017-01-12], y: ["x"]},
%{date: ~D[2017-01-13], y: ["x"]}, %{date: ~D[2017-01-14], y: ["x"]},
%{date: ~D[2017-01-15], y: ["x"]}, %{date: ~D[2017-01-16], y: ["x"]},
%{date: ~D[2017-01-17], y: ["x"]}, %{date: ~D[2017-01-18], y: ["x"]},
%{date: ~D[2017-01-19], y: ["x"]}, %{date: ~D[2017-01-20], y: ["x"]},
%{date: ~D[2017-01-21], y: ["x"]}, %{date: ~D[2017-01-22], y: ["x"]},
%{date: ~D[2017-01-23], y: ["x"]}, %{date: ~D[2017-01-24], y: ["x"]},
%{date: ~D[2017-01-25], y: ["x"]}, %{date: ~D[2017-01-26], y: ["x"]},
%{date: ~D[2017-01-27], y: ["x"]}, %{date: ~D[2017-01-28], y: ["x"]},
%{date: ~D[2017-01-29], y: ["x"]}, %{date: ~D[2017-01-30], y: ["x"]},
%{date: ~D[2017-01-31], y: ["x"]}, %{date: ~D[2017-02-01], y: ["x"]},
%{date: ~D[2017-02-02], y: ["x"]}, %{date: ~D[2017-02-03], y: ["x"]}
]

我想要一个几个月的清单,其中包含日子:

[
[
%{date: ~D[2017-01-01], y: ["x"]}, %{date: ~D[2017-01-02], y: ["x"]},
%{date: ~D[2017-01-03], y: ["x"]}, %{date: ~D[2017-01-04], y: ["x"]},
%{date: ~D[2017-01-05], y: ["x"]}, %{date: ~D[2017-01-06], y: ["x"]},
%{date: ~D[2017-01-07], y: ["x"]}, %{date: ~D[2017-01-08], y: ["x"]},
%{date: ~D[2017-01-09], y: ["x"]}, %{date: ~D[2017-01-10], y: ["x"]},
%{date: ~D[2017-01-11], y: ["x"]}, %{date: ~D[2017-01-12], y: ["x"]},
%{date: ~D[2017-01-13], y: ["x"]}, %{date: ~D[2017-01-14], y: ["x"]},
%{date: ~D[2017-01-15], y: ["x"]}, %{date: ~D[2017-01-16], y: ["x"]},
%{date: ~D[2017-01-17], y: ["x"]}, %{date: ~D[2017-01-18], y: ["x"]},
%{date: ~D[2017-01-19], y: ["x"]}, %{date: ~D[2017-01-20], y: ["x"]},
%{date: ~D[2017-01-21], y: ["x"]}, %{date: ~D[2017-01-22], y: ["x"]},
%{date: ~D[2017-01-23], y: ["x"]}, %{date: ~D[2017-01-24], y: ["x"]},
%{date: ~D[2017-01-25], y: ["x"]}, %{date: ~D[2017-01-26], y: ["x"]},
%{date: ~D[2017-01-27], y: ["x"]}, %{date: ~D[2017-01-28], y: ["x"]},
%{date: ~D[2017-01-29], y: ["x"]}, %{date: ~D[2017-01-30], y: ["x"]},
%{date: ~D[2017-01-31], y: ["x"]}
],
[
%{date: ~D[2017-02-01], y: ["x"]},
%{date: ~D[2017-02-02], y: ["x"]}, %{date: ~D[2017-02-03], y: ["x"]}
]
]

因为每个月的长度不同(加上leap年问题),所以我不知道如何拆分列表。可以做到吗?

我会使用 Enum.chunk_by/2,返回年度元组以及回调函数中每个元素日期的月份。这将在每年或月更改时将清单分开。(如果您的列表包含e.g 2016-01-01,其次是2017-01-01。)

,仅month无法正常工作。
list = [
  %{date: ~D[2017-01-01], y: ["x"]}, %{date: ~D[2017-01-02], y: ["x"]},
  %{date: ~D[2017-01-03], y: ["x"]}, %{date: ~D[2017-01-04], y: ["x"]},
  %{date: ~D[2017-01-05], y: ["x"]}, %{date: ~D[2017-01-06], y: ["x"]},
  %{date: ~D[2017-01-07], y: ["x"]}, %{date: ~D[2017-01-08], y: ["x"]},
  %{date: ~D[2017-01-09], y: ["x"]}, %{date: ~D[2017-01-10], y: ["x"]},
  %{date: ~D[2017-01-11], y: ["x"]}, %{date: ~D[2017-01-12], y: ["x"]},
  %{date: ~D[2017-01-13], y: ["x"]}, %{date: ~D[2017-01-14], y: ["x"]},
  %{date: ~D[2017-01-15], y: ["x"]}, %{date: ~D[2017-01-16], y: ["x"]},
  %{date: ~D[2017-01-17], y: ["x"]}, %{date: ~D[2017-01-18], y: ["x"]},
  %{date: ~D[2017-01-19], y: ["x"]}, %{date: ~D[2017-01-20], y: ["x"]},
  %{date: ~D[2017-01-21], y: ["x"]}, %{date: ~D[2017-01-22], y: ["x"]},
  %{date: ~D[2017-01-23], y: ["x"]}, %{date: ~D[2017-01-24], y: ["x"]},
  %{date: ~D[2017-01-25], y: ["x"]}, %{date: ~D[2017-01-26], y: ["x"]},
  %{date: ~D[2017-01-27], y: ["x"]}, %{date: ~D[2017-01-28], y: ["x"]},
  %{date: ~D[2017-01-29], y: ["x"]}, %{date: ~D[2017-01-30], y: ["x"]},
  %{date: ~D[2017-01-31], y: ["x"]}, %{date: ~D[2017-02-01], y: ["x"]},
  %{date: ~D[2017-02-02], y: ["x"]}, %{date: ~D[2017-02-03], y: ["x"]}
]
list
|> Enum.chunk_by(fn %{date: %{year: year, month: month}} -> {year, month} end)
|> IO.inspect

输出:

[[%{date: ~D[2017-01-01], y: ["x"]}, %{date: ~D[2017-01-02], y: ["x"]},
  %{date: ~D[2017-01-03], y: ["x"]}, %{date: ~D[2017-01-04], y: ["x"]},
  %{date: ~D[2017-01-05], y: ["x"]}, %{date: ~D[2017-01-06], y: ["x"]},
  %{date: ~D[2017-01-07], y: ["x"]}, %{date: ~D[2017-01-08], y: ["x"]},
  %{date: ~D[2017-01-09], y: ["x"]}, %{date: ~D[2017-01-10], y: ["x"]},
  %{date: ~D[2017-01-11], y: ["x"]}, %{date: ~D[2017-01-12], y: ["x"]},
  %{date: ~D[2017-01-13], y: ["x"]}, %{date: ~D[2017-01-14], y: ["x"]},
  %{date: ~D[2017-01-15], y: ["x"]}, %{date: ~D[2017-01-16], y: ["x"]},
  %{date: ~D[2017-01-17], y: ["x"]}, %{date: ~D[2017-01-18], y: ["x"]},
  %{date: ~D[2017-01-19], y: ["x"]}, %{date: ~D[2017-01-20], y: ["x"]},
  %{date: ~D[2017-01-21], y: ["x"]}, %{date: ~D[2017-01-22], y: ["x"]},
  %{date: ~D[2017-01-23], y: ["x"]}, %{date: ~D[2017-01-24], y: ["x"]},
  %{date: ~D[2017-01-25], y: ["x"]}, %{date: ~D[2017-01-26], y: ["x"]},
  %{date: ~D[2017-01-27], y: ["x"]}, %{date: ~D[2017-01-28], y: ["x"]},
  %{date: ~D[2017-01-29], y: ["x"]}, %{date: ~D[2017-01-30], y: ["x"]},
  %{date: ~D[2017-01-31], y: ["x"]}],
 [%{date: ~D[2017-02-01], y: ["x"]}, %{date: ~D[2017-02-02], y: ["x"]},
  %{date: ~D[2017-02-03], y: ["x"]}]]

最新更新