2009-01-07 28 views
3

從csv文件導入數字時,我需要將它們轉換爲單位浮點數。F#度量單位 - 「提升」值浮動<something>

目前我做這與內聯函數:

data |> List.map float |> List.map (fun n -> n * 1.0<m>) 

但我不知道是否有一個更優雅的方式來做到這一點 - 或者我要創造我自己的「單位」與轉換模塊功能?

將是非常好的什麼會是這樣,但我懷疑這是可能的......

data |> List.map float |> List.map lift<m> 

這是我剛纔的問題(How to generically remove F# Units of measure)的對面。

更新:對於自制的單位,我已經試過這一點,這工程確定:

[<Measure>] 
type km = 
    static member lift (v:float) = v * 1.0<km> 

data |> List.map float |> List.map km.lift 

,或者按照this answer

data |> List.map (float >> km.lift) 

回答

2

問題看起來測量可以」單位t是目前的類型參數(不知道這是否會改變)。所以寫這個最短的方法是:

data |> List.map float |> List.map ((*) 1.0<m>) 

編輯

又見現在FloatWithMeasure這裏

http://msdn.microsoft.com/en-us/library/ee806527(VS.100).aspx

+0

鑑於單位純粹是編譯時間,它似乎不可能改變。 – 2009-01-07 15:04:50

+0

FloatWithMeasure剛剛從大量的頭髮拉我救了我,謝謝:) – 2011-12-18 14:08:35

1

是否有任何理由,你爲什麼要映射兩次?這是什麼問題:

data |> List.map (fun x -> (float x) * 1.0<m>)