Доступ к свойству после Seq.find () - PullRequest
0 голосов
/ 29 августа 2018

Вероятно, очень простой вопрос - если у меня есть последовательность объектов, для которых я запускаю 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 'несовместим с типом' MyType ' в строке 6.

Вы не можете использовать Seq.Map(), поскольку передаваемый объект больше не является последовательностью.

1 Ответ

0 голосов
/ 29 августа 2018

Либо вы можете использовать парены:

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

или лямбда-абстракция:

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

Другим способом было бы использовать функцию выбора, а затем вы определяете символ mt один раз:

array |> Seq.pick (fun mt -> if mt.Id = 1 then Some my.Text else None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...