Группировка может быть выполнена с помощью Seq.groupBy
.
Запуск Seq.groupBy fst input
Выход:
seq
[("Apple", seq [("Apple", "500"); ("Apple", "200"); ("Apple", "100")]);
("Orange", seq [("Orange", "123"); ("Orange", "234")]);
("Pineapple", seq [("Pineapple", "300")]);
("Cucumber", seq [("Cucumber", "900")])]
Это близко, но не совсем то, что вы хотитепотому что вторые элементы полученного кортежа содержат полный входной объект, тогда как ваш пример показывает, что вы хотите извлечь второй элемент из списка.Вы можете получить второй элемент из кортежа, используя snd
, и, поскольку у вас есть последовательность кортежей, из которой вы хотите извлечь второй элемент, вы можете использовать Seq.map
:
let grouped = Seq.groupBy fst input
|> Seq.map (fun (a, b) -> (a, Seq.map snd b))
printfn "%A" grouped
// yields...
seq
[("Apple", seq ["500"; "200"; "100"]); ("Orange", seq ["123"; "234"]);
("Pineapple", seq ["300"]); ("Cucumber", seq ["900"])]