在学习F#+ Linq的awesomness的过程中,我遇到了一个问题,我无法解决(很好)使用函数,OOP和Linq语法,是否有人愿意帮助?
让我们说我的输入是以下顺序:
let db = seq [ ("bob", 90, ['x';'y'])
("bob", 70, ['z'])
("frank", 20, ['b'])
("charlie", 10, ['c']) ]
Run Code Online (Sandbox Code Playgroud)
行可以读取例如"学生鲍勃已经注册了x,y在第90学期"
我需要的是这个:
[ ("bob", [90; 70], ['x'; 'y'; 'z'])
("frank", [20], ['b'])
("charlie", [10], ['c']) ]
Run Code Online (Sandbox Code Playgroud)
这将改为"鲍勃已完成学期90,70并取x,y,z".
Linq/Relational方法通常为这些问题提供最可读的解决方案.但我能想到的最好的是:
type Student = string
type Semester = int
type Class = char
let restructure (inp:seq<Student * Semester * Class list>) = query {
for (student, semester, classes) in inp do
groupValBy (semester,classes) student into data
yield (data.Key, Seq.map fst data, Seq.collect …Run Code Online (Sandbox Code Playgroud)