gpt4 book ai didi

arrays - F#类型转换字符串数组

转载 作者:行者123 更新时间:2023-12-04 13:47:15 24 4
gpt4 key购买 nike

我有2个数组。数组1是一个字符串数组,其中包含类型的名称。

因此,数组1的内容如下所示:

["nvarchar";"nvarchar";"date";"nvarchar"] //these are all strings

数组2是另一个字符串数组,其内容如下所示:
["Jackson";"Sentzke";"1991-04-19T00:00:00";"Jackson Sentske"]

我的问题是数组2中的所有值都是字符串,并且我希望它们成为数组1中的类型。有没有办法我可以使用数组1中的字符串将类型转换为数组2中的字符串?

最佳答案

正如@ s952163所指出的那样,您似乎正在尝试从数据库中读取数据,在这种情况下,可以使用更好的选择,而不是自己尝试进行操作。不过,如果以OP的票面值(value)为基础,只是草拟一个可能的解决方案,这是解决该问题的一种方法。

由于列出的类型不是.NET类型,因此最好定义一个自定义类型来保存此类值:

open System

type DbType = NVarChar of string | DT of DateTime

您可以根据需要向 DbType添加更多案例。

使用 active patterns,您可以编写一个函数来转换单个候选者:
// string * string -> string option
let (|NVarChar|_|) = function
| "nvarchar", (x : string) -> Some x
| _ -> None

// string * string -> DateTime option
let (|DT|_|) (typeHint, value) =
match (typeHint, DateTime.TryParse value) with
| "date", (true, dt) -> Some dt
| _ -> None

// string * string -> DbType option
let convertPair = function
| NVarChar x -> Some (NVarChar x)
| DT x -> Some (DT x)
| _ -> None

不一定必须使用 Activity 模式,但我认为它使我能够很好地分解问题。

现在,您可以声明类型和值之一的列表,将它们压缩在一起以获得解释值的列表:
> let types = ["nvarchar"; "nvarchar"; "date"; "nvarchar"];;    
val types : string list = ["nvarchar"; "nvarchar"; "date"; "nvarchar"]

> let values = ["Jackson"; "Sentzke"; "1991-04-19T00:00:00"; "Jackson Sentske"];;
val values : string list =
["Jackson"; "Sentzke"; "1991-04-19T00:00:00"; "Jackson Sentske"]

> let converted = List.zip types values |> List.choose convertPair;;
val converted : DbType list =
[NVarChar "Jackson"; NVarChar "Sentzke"; DT 19.04.1991 00:00:00;
NVarChar "Jackson Sentske"]

请注意, typesvalues的类型均为 string list。在OP中,它们是 (string * string * string * string) list,我认为这是一个错误。

关于arrays - F#类型转换字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39994069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com