Мне нужна функция типа Seq.head, но возвращающая None вместо того, чтобы бросать исключение, когда последовательность пуста, т.е. seq<'T> -> 'T option.
Есть миллионы способов сделать это. Вот несколько:
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 - тот, который я использую. Два вопроса:
- Есть ли особенно идиоматический способ сделать это?
- Поскольку нет встроенной функции
Seq.tryHead, указывает ли это, что это не обязательно, является необычным или лучше реализовано без функции?
UPDATE
tryHead был добавлен в стандартную библиотеку в F # 4.0.