FirstOrDefault в F # - PullRequest
       16

FirstOrDefault в F #

9 голосов
/ 07 мая 2010

Как написать FirstOrDefault Linq Query на F #? Могу ли я использовать linq для sql в F # полностью?

Ответы [ 4 ]

14 голосов
/ 07 мая 2010

Обратите внимание, что более идиоматический подход в F #, вероятно, будет использовать что-то вроде Seq.tryFind, а не операторы LINQ, хотя это не капля замены, так как возвращает значение параметра.

8 голосов
/ 30 июля 2014

Поскольку модуль Seq уже имеет функцию head типа seq<'a> -> 'a, я бы определил функцию tryHead с подписью seq<'a> -> option<'a>:

module Seq =
    let tryHead (ls:seq<'a>) : option<'a>  = ls |> Seq.tryPick Some

используя его как:

[1; 2; 3] |> Seq.tryHead
4 голосов
/ 07 мая 2010

Относительно LINQ-to-SQL см.

http://blogs.msdn.com/dsyme/archive/2009/10/23/a-quick-refresh-on-query-support-in-the-f-power-pack.aspx

Что касается FirstOrDefault, это просто расширение метод в пространстве имен System.Linq:

let l = [1;2;3]
open System.Linq 
let r = l.FirstOrDefault()
3 голосов
/ 30 октября 2012

В качестве альтернативы, вы можете легко определить свою первую ошибку по умолчанию:

let firstordefault list =
   match list with
   | head :: tail -> head 
   | [] -> 0 // some default value

Пример:

let exampleList = [ 1; 2; 3 ]

с использованием интерактивной F #,

firstordefault exampleList;;  
val it : int = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...