gpt4 book ai didi

f# - 在 Seq.find() 之后访问属性

转载 作者:行者123 更新时间:2023-12-02 08:05:21 25 4
gpt4 key购买 nike

可能是一个非常简单的问题 - 如果我有一个对象序列,我在其上运行 Seq.find() 以返回单个元素,那么我如何在不存储整个元素的情况下访问一个属性元素作为变量?

例如

type MyType = { Id : int; Text : string }
let obs = [| { Id = 1; Text = "Hello" }; { Id = 2; Text = "Goodbye" } |] :> seq<MyType>

let getFirstText (array : seq<MyType>) =
array |> Seq.find(fun mt -> mt.Id = 1) |> .Text
^^^^^
getFirstText obs |> printfn "%s"

这给出了意外的符号“.”在表达中

尝试 Seq.find(fun mt -> mt.Id = 1).Text 给出类型约束不匹配 - 类型 ''a -> MyType' 与第 6 行的类型 'MyType' 不兼容

您不能使用 Seq.Map(),因为传递的对象不再是序列。

最佳答案

要么你可以使用括号:

(array |> Seq.find(fun mt -> mt.Id = 1)).Text

或 lambda 抽象:

array |> Seq.find(fun mt -> mt.Id = 1) |> (fun mt -> mt.Text)

另一种方法是使用 pick 函数,然后定义一次 mt 符号:

array |> Seq.pick (fun mt -> if mt.Id = 1 then Some my.Text else None)

关于f# - 在 Seq.find() 之后访问属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52074413/

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