F# 在F中转换字符串#

F# 在F中转换字符串#,f#,F#,我正在尝试转换文件名,如下所示: 十个俱乐部。png 到 10_of_clubs.png 但是,我不喜欢我的实现: let getFile (card: Card Option) = let fileName = match card with | Some card -> (getUnionTypeName card.Face + "_of_" + getUnionTypeName card.Suit + ".png").ToLower()

我正在尝试转换文件名,如下所示:

十个俱乐部。png

10_of_clubs.png

但是,我不喜欢我的实现:

let getFile (card: Card Option) =
    let fileName = 
        match card with
        | Some card -> (getUnionTypeName card.Face + "_of_" + getUnionTypeName card.Suit + ".png").ToLower()
        | None -> ""

    let delimitedName = fileName.Split '_'
    let currentFace = delimitedName.[0]
    let updatedFace = 
        match currentFace with
        | "two" -> "2"
        | "three" -> "3"
        | "four" -> "4"
        | "five" -> "5"
        | "six" -> "6"
        | "seven" -> "7"
        | "eight" -> "8"
        | "nine" -> "9"
        | "ten" -> "10"
        | _ -> currentFace
    updatedFace + "_" + delimitedName.[1] + "_" + delimitedName.[2]
在F#中,如何在不引用所有元素的情况下更改字符串的第一个元素

例如:

updatedFace + "_" + delimitedName.[1] + "_" + delimitedName.[2]


将字符串拆分为u后,将得到一个部分数组。数组是可变集合。您可以先通过函数进行更改,然后再通过u连接

let parts = myString.Split [|'_'|]
parts.[0] <- toNumber parts.[0]
String.concat "_" parts
let parts=myString.Split[|“”|]

部分。[0]将字符串拆分为u后,将得到一个部分数组。数组是可变集合。您可以先通过函数进行更改,然后再通过u连接

let parts = myString.Split [|'_'|]
parts.[0] <- toNumber parts.[0]
String.concat "_" parts
let parts=myString.Split[|“”|]

部分。[0]没有理由先构造一个格式化字符串,然后拆分它,最后创建一个新的格式化字符串

假设您的目的是在
None
情况下返回空字符串,您可以执行以下操作:

let getFile card =
    let digitize candidate = 
        match candidate with
        | "Two" -> "2"
        | "Three" -> "3"
        | "Four" -> "4"
        | "Five" -> "5"
        | "Six" -> "6"
        | "Seven" -> "7"
        | "Eight" -> "8"
        | "Nine" -> "9"
        | "Ten" -> "10"
        | _ -> candidate
    match card with
    | Some c ->
        let face = c.Face |> string |> digitize
        let suit = c.Suit |> string
        sprintf "%s_of_%s.png" face suit
    | None -> ""
在这里,我假设
Face
Suit
类型覆盖
ToString
,而不是依赖一个我不知道的名为
getUnionTypeName
的函数。这使您能够使用内置函数
string
(它只调用
ToString()

特别测试:

> Some { Face = Ten; Suit = Clubs } |> getFile;;
val it : string = "10_of_Clubs.png"
> Some { Face = Jack; Suit = Clubs } |> getFile;;
val it : string = "Jack_of_Clubs.png"
> None |> getFile;;
val it : string = ""
这个
digitalize
函数看起来像是一个通用函数的候选函数,我想知道BCL的全球化名称空间中是否还没有类似的东西。。。否则,我肯定有数百个NuGet软件包实现了这样的功能


事实证明,目前还没有数百个NuGet软件包已经做到了这一点,所以我创建了一个名为。使用它,您可以将
getFile
函数简化为:

open Ploeh.Numsense

let getFile card =
    let digitize candidate = 
        match Numeral.tryParseEnglish candidate with
        | Some i -> string i
        | None -> candidate
    match card with
    | Some c ->
        let face = c.Face |> string |> digitize
        let suit = c.Suit |> string
        sprintf "%s_of_%s.png" face suit
    | None -> ""

没有理由先构造一个格式化字符串,然后拆分它,最后创建一个新的格式化字符串

假设您的目的是在
None
情况下返回空字符串,您可以执行以下操作:

let getFile card =
    let digitize candidate = 
        match candidate with
        | "Two" -> "2"
        | "Three" -> "3"
        | "Four" -> "4"
        | "Five" -> "5"
        | "Six" -> "6"
        | "Seven" -> "7"
        | "Eight" -> "8"
        | "Nine" -> "9"
        | "Ten" -> "10"
        | _ -> candidate
    match card with
    | Some c ->
        let face = c.Face |> string |> digitize
        let suit = c.Suit |> string
        sprintf "%s_of_%s.png" face suit
    | None -> ""
在这里,我假设
Face
Suit
类型覆盖
ToString
,而不是依赖一个我不知道的名为
getUnionTypeName
的函数。这使您能够使用内置函数
string
(它只调用
ToString()

特别测试:

> Some { Face = Ten; Suit = Clubs } |> getFile;;
val it : string = "10_of_Clubs.png"
> Some { Face = Jack; Suit = Clubs } |> getFile;;
val it : string = "Jack_of_Clubs.png"
> None |> getFile;;
val it : string = ""
这个
digitalize
函数看起来像是一个通用函数的候选函数,我想知道BCL的全球化名称空间中是否还没有类似的东西。。。否则,我肯定有数百个NuGet软件包实现了这样的功能


事实证明,目前还没有数百个NuGet软件包已经做到了这一点,所以我创建了一个名为。使用它,您可以将
getFile
函数简化为:

open Ploeh.Numsense

let getFile card =
    let digitize candidate = 
        match Numeral.tryParseEnglish candidate with
        | Some i -> string i
        | None -> candidate
    match card with
    | Some c ->
        let face = c.Face |> string |> digitize
        let suit = c.Suit |> string
        sprintf "%s_of_%s.png" face suit
    | None -> ""