我需要在下面的代码中将函数应用于由(<seq>)
表示的每个组,但是要让该函数将每个组视为新数据。因此,该函数将在遍历每个组之后重置,然后输出新转换的组。
let datafilter =
datacsv
|> List.groupBy (fun row -> row.Class,row.Room)
|> List.iter (fun ((class,room),rows) -> func rows )
(* Outputs [((112, 1), <seq>); ((113, 2), <seq>); ((114, 3), <seq>);
((115, 4), <seq>); ((116, 5), <seq>); ((117, 6), <seq>);
((118, 7), <seq>); ((119, 8), <seq>); ((120, 9), <seq>);
((121, 10), <seq>); ((122, 11), <seq>); ((123, 12), <seq>)] *)
type RoomAssignment =
{ Class : int
Room : int
Date : DateTime
People : int }
func
是随机函数。运行代码时出现错误结果:
TermStructure.fsx(96,46): error FS0001: This expression was expected to have type
'unit'
but here has type
'RoomAssignment list'
答案 0 :(得分:4)
您没有说出func
函数应该做什么,但是从收到的错误来看,它似乎产生了RoomAssignment
个值的列表。如果要收集结果并为每个组获取一个结果,则可能需要map
而不是iter
:
let datafilter =
datacsv
|> List.groupBy (fun row -> row.Class, row.Room)
|> List.map (fun ((class,room),rows) -> func rows)
例如,如果将func
替换为Seq.length
,则将返回每个组中的行数(由一对班级和房间定义)。
如果没有完整的可复制代码段,很难给出更有用的答案,但是希望这将指导您正确的方向。