【发布时间】:2013-12-03 15:33:12
【问题描述】:
我正在编写我的第一个 F# 程序,目的只是为了学习 F#。
我想要的是提供日期列表和这些日期的属性(例如DayOfWeek、DayOfMonth)。我设法提供了日期列表,并且我知道 .net 框架为我提供了提取所有属性所需的一切,我只是不知道如何将属性添加为列表中的新列。 到目前为止,这是我所拥有的:
type Span = Span of TimeSpan with
static member (+) (d:DateTime, Span wrapper) = d + wrapper //this is defining the + operator
static member Zero = Span(new TimeSpan(0L))
type Dates() =
let a = DateTime.Parse("01/12/2013")
let b =DateTime.Parse("02/12/2013")
let ts = TimeSpan.FromDays(1.0)
member this.Get() = [a .. Span(ts) .. b]
let mydates = new Dates()
mydates.Get()
当我运行该代码时,我会得到一个 DateTime 值列表,列表中有 2 条记录。我现在可以这样做:
mydates.Get() |> List.map (fun x -> x.DayOfWeek);;
返回:
验证它:DayOfWeek 列表 = [星期日;星期一]
或
mydates.Get() |> List.map (fun x -> x.DayOfYear);;
返回:
验证它:int list = [335; 336]
这一切都很好,但是我想做的是投影一个包含 2 个“列”(如果列是正确的词)的列表,以便我的输出是(类似于):
验证它:int list = [(Sunday,335); (星期一,336)]
我希望这能解释我所追求的。
谢谢
杰米
【问题讨论】:
-
我不太明白你的问题,你的所有代码似乎都运行良好,你想过滤
Get()的输出 -
要从现有列表中创建新的值列表,您可以执行以下操作:
[for x in 1..5 -> x * x]。这将创建一个 x 的正方形列表,但该部分可以替换为您想要的任何投影。这就是你要找的东西吗? -
你能给我们三行你期望输出的样子吗?
-
大家好,非常感谢您到目前为止的回复。我真的没有很好地解释这一点,不是吗?因此,我对其进行了修改,希望能更好地解释我所追求的。
标签: f#