首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >F# -重量(计量单位)石头-磅

F# -重量(计量单位)石头-磅
EN

Stack Overflow用户
提问于 2017-10-13 09:05:52
回答 2查看 123关注 0票数 2

我有一个csv文件,其中包含每天的重量如下:

代码语言:javascript
复制
Date,Name,Weight
11-Sep-2017,Alpha,9-1
13-Sep-2017,Alpha,8-13
15-Sep-2017,Alpha,8-11

虽然我可以使用CsvProvider成功地导入它们,但权重列默认为System.DateTime。

代码语言:javascript
复制
    // Weight
    [<Measure>] type lb

    [<Literal>]
    let input = "DayWeights.csv"
    type Weights = CsvProvider<input, HasHeaders=true>

    let data = Weights.GetSample()
    for row in data.Rows do
        printfn "Output: (%A, %A, %A)" row.Date row.Name row.Weight

是否可以创建一个度量单位(UoM)来定义"stlb“,并在导入时选择将其转换为lbs,如果可以,如何实现?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-13 09:26:58

我不认为您可以将stones磅表示为单个数字类型,而度量单位只能用于数字类型(尽管将来会对此进行一些讨论更改)。这是因为它们的一些特性只适用于数字运算,如加法和乘法。这些单位本身是成倍的和被分割的:

代码语言:javascript
复制
[<Measure>] type lb
2<lb> + 2<lb> // 4<lb>
2<lb> * 2<lb> // 4<lb ^ 2>
2<lb> / 2<lb> // 1

与度量单位不同,如果您想要某种标记知道给定的值具有某种类型的石头-磅,您可以创建一个单独的受歧视的联合:

代码语言:javascript
复制
type StonesPounds = StonesPounds of int * int

// StonesPounds -> int<lb>
let convertToLb (StonesPounds (s, p)) = (s * 14 + p) * 1<lb>

StonesPounds (1, 2) |> convertToLb // 16<lb>

与度量单位相比,这种方法的缺点是,在使用数字之前,必须手动打包和解压缩这些值,这也需要运行时成本。

票数 2
EN

Stack Overflow用户

发布于 2017-10-13 17:12:33

我将输入权重列自动转换为System.DateTime的解析如下:

代码语言:javascript
复制
// http://fssnip.net/27
let lazySplit (sep:string) (str:string) =
    match sep, str with
    | ((null | ""), _) | (_, (null | "")) -> seq [str]
    | _ ->
      let n, j = str.Length, sep.Length
      let rec loop p =
        seq {
          if p < n then
            let i = match str.IndexOf(sep, p) with -1 -> n | i -> i
            yield str.Substring(p, i - p)
            yield! loop (i + j)
        }
      loop 0

let weight input =
    input
    |> (fun x -> lazySplit "/" x |> Seq.take 2 |> String.concat("-"))

let data = Weighings.GetSample()
for row in data.Rows do
    let stlbs = weight (string row.Weight)
    printfn "Output: (%A, %A, %A)" row.Date row.Name stlbs

// Output: 11-Sep-2017,"Alpha","09-01")

感谢您的专家帮助和指导。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46726271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档