При необходимости взять первый элемент в последовательности

Мне нужна функция вроде Seq.head , но возвращающая None вместо выдачи исключения, когда последовательность пуста, то есть seq ->' T вариант .

Есть миллионы способов сделать это. Вот несколько:

let items = Seq.init 10 id
let a = Seq.tryFind (fun _ -> true) items
let b = Seq.tryPick Some items
let c = if Seq.isEmpty items then None else Some (Seq.head items)
let d = 
  use e = items.GetEnumerator()
  if e.MoveNext() then Some e.Current
  else None

b - это тот, который я использую. Два вопроса:

  1. Есть ли какой-то особенный идиоматический способ сделать это?
  2. Поскольку нет встроенной функции Seq.tryHead , означает ли это, что в этом нет необходимости, это редкость или лучше реализовать без функции?

UPDATE

tryHead был добавлен в стандартную библиотеку в F # 4.0

.

16
задан Daniel 1 June 2015 в 14:23
поделиться