Как использовать tryPick для получения первого элемента последовательности?

StackOverflow https://stackoverflow.com/questions/1481957

  •  18-09-2019
  •  | 
  •  

Вопрос

Сегодня я пытался использовать Seq.first, и компилятор сообщил, что он устарел в пользу Seq.tryPick.Он говорит, что применяет функцию и возвращает первый результат, который возвращает Some.Думаю, я могу просто сказать fun x -> x!=0, так как знаю, что первый из них вернет Some в моем случае, но какое ограничение здесь следует поставить?Каков правильный синтаксис?

Чтобы уточнить, я хочу использовать его в формате:

let foo(x:seq<int>) =
   x.filter(fun x -> x>0)
   |> Seq.tryPick (??)
Это было полезно?

Решение

Ключевым моментом является то, что «Seq.first» не возвращал первый элемент, а возвращал первый элемент, соответствующий некоторому предикату «выбрать»:

let a = [1;2;3]
// two ways to select the first even number (old name, new name)
let r1 = a |> Seq.first (fun x -> if x%2=0 then Some(x) else None) 
let r2 = a |> Seq.tryPick (fun x -> if x%2=0 then Some(x) else None) 

Если вам нужен только первый элемент, используйте Seq.head

let r3 = a |> Seq.head 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top