从现有价值中预测新值

时间:2013-12-02 21:53:16

标签: f#

我正在编写我的第一个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);;

返回:

  

val it:DayOfWeek list = [Sunday;星期一]

mydates.Get() |> List.map (fun x -> x.DayOfYear);;

返回:

  

val it:int list = [335; 336]

这一切都很棒,但是我想做的是投射一个包含2个“列”的列表(如果列是正确的单词),这样我的输出就是(类似):

  

val it:int list = [(Sunday,335); (星期一,336)]

我希望这能解释我的目标。

感谢

杰米

1 个答案:

答案 0 :(得分:1)

对于您的示例,解决方案很简单,让地图返回一个像这样的元组

mydates.Get() |> List.map (fun x -> x.DayOfWeek,x.DayOfYear);;