2016-11-28 6 views
4

я упорядоченная последовательность следующего вида:фильтра Последовательность типов записей по свойству

type Comparison<'a when 'a :> IKey > = {Id: string; src: 'a; dest: 'a} 

То, что я хотел бы сделать, это там, где есть более чем одна запись с тем же Id только взять последняя запись в последовательности для каждого идентификатора (последовательность была сформирована из упорядоченных результатов запроса), а также записи, в которых идентификатор не используется совместно с другими записями.

Есть ли способ в F # для генерации новой последовательности таким образом?

+0

Если базовая реализация вашей последовательности гарантированно сохранит порядок, вам просто нужно использовать 'Seq.filter' – Sehnsucht

ответ

4

Как о:

items 
|> Seq.groupBy (fun x -> x.Id) 
|> Seq.map (snd >> Seq.last) 

этой группе элементы в последовательность кортежей, где первый элемент является идентификатором, а второй представляет собой последовательность элементов с этим идентификатором.

Затем карта применяет Seq.last ко второму элементу этих кортежей.

+0

Это отлично работает. Благодарю. –