F# 从现有值投影新值

F# 从现有值投影新值,f#,F#,我正在写我的第一个F#程序,目的只是为了学习F# 我想要的是提供一个日期列表,以及这些日期的属性(例如DayOfWeek、DayOfMonth)。我已经设法提供了日期列表,而且我知道.net Framework为我提供了提取所有属性所需的一切,我只是不知道如何将属性添加为列表中的新列。 以下是我目前掌握的情况: type Span = Span of TimeSpan with static member (+) (d:DateTime, Span wrapper) = d + wrapper

我正在写我的第一个F#程序,目的只是为了学习F#

我想要的是提供一个日期列表,以及这些日期的属性(例如DayOfWeek、DayOfMonth)。我已经设法提供了日期列表,而且我知道.net Framework为我提供了提取所有属性所需的一切,我只是不知道如何将属性添加为列表中的新列。 以下是我目前掌握的情况:

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()
当我运行该代码时,我得到一个日期时间值列表,列表中有2条记录。我现在可以这样做:

mydates.Get() |> List.map (fun x -> x.DayOfWeek);;
返回:

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

返回:

val it:int list=[335;336]

这很好,但是我想做的是投影一个有2个“列”的列表(如果列是正确的词),这样我的输出是(类似于):

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

我希望这能解释我的目的

谢谢


Jamie

对于您的示例,解决方案很简单,让映射返回一个元组,如下所示

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

我不太理解您的问题,您的所有代码似乎都运行正常,是否要筛选
Get()
的输出以从现有列表中创建新的值列表?您可以执行以下操作:
[for x in 1..5->x*x]
。这将创建x的正方形列表,但该部分可以替换为您想要的任何投影。这就是你想要的吗?你能给我们三行你期望的输出吗?嗨,伙计们,非常感谢你们到目前为止的回复。我真的没有很好地解释这件事,是吗?所以,我对它进行了修改,希望能更好地解释我所追求的。是的,这确实是非常简单的:)谢谢你,约翰,希望你能告诉我我是一个真正的新手。嗨,约翰,如果我可以的话,我想问你一个后续问题。我之前没有说的是,我将包装为一个Web API,这意味着最终这个东西将返回JSON。我遇到的问题是JSON字段的名称类似于m_item1、m_Item3等等。。。而不是星期几、一年中的某一天等。。有没有办法给元组的元素取别名(即给它们一个有意义的名称)?您可以使用记录类型-请参阅
mydates.Get() |> List.map (fun x -> x.DayOfWeek,x.DayOfYear);;