2013-12-02 7 views
0

Я пишу свою первую программу 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() 

Когда я запускаю этот код я получаю список значений DateTime, с 2 записей в списке. Теперь я могу сделать что-то вроде этого:

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

, который возвращает:

вал это: список DayOfWeek = [воскресенье; Понедельник]

или

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

, которая возвращает:

вал это: список INT = [335; 336]

Это все здорово, но то, что я хотел бы сделать, это проект список, который имеет 2 «столбцы» (если столбцы правильное слово), так что мой вывод (что-то вроде):

val it: int list = [(воскресенье, 335); (Понедельник, 336)]

Надеюсь, это объяснит, что мне нужно.

благодаря

Джейми

+1

Я не совсем понимаю вашу проблему, появляется весь ваш код для того, чтобы работать нормально, вы хотите отфильтровать вывод 'Get()' –

+0

. Чтобы создать новый список значений из существующего списка, вы сделали бы что-то вроде этого: '[for x in 1..5 -> x * x ] '. Это создает список квадратов x, но эта часть может быть заменена любой проекцией, которую вы хотите. Это то, что вы ищете? – mydogisbox

+0

Можете ли вы дать нам три строки того, что вы ожидаете от вывода? –

ответ

1

Для примера, решение простое, сделать карту возвращать кортеж, как так

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

Да, это действительно смешно просто :) Спасибо, Джон, надеюсь, вы можете сказать, что я настоящий новичок здесь. – jamiet

+0

Привет, Джон, последующий вопрос, если можно. То, что я раньше не говорил, заключается в том, что я обертываю как веб-интерфейс API, и в конечном итоге эта вещь возвращает JSON. проблема в том, что поля JSON имеют имена, такие как m_item1, m_Item3 и т. д., а не DayOfWeek, DayOfYear и т. д. Есть ли способ сгладить элементы кортежа (т. е. дать им значимое имя)? – jamiet

+0

Вы можете использовать тип записи - см. Http://msdn.microsoft.com/en-us/library/dd233184.aspx –

Смежные вопросы