我对F#非常(非常)陌生,而且我对一个小问题感到头疼。我有string list list
我试图操纵和转换。这可能是微不足道的。
正在从CSV文件中读取以下数据:
1,ABC,3
1,DEF,3
1,XYZ,1
2,ABC,2
2,XYZ,1
3,DEF,2
3,XYZ,2
哪个对或错,我正在读string list list
。此数据表示非标准化数据集,其中每条记录上索引0
处的字段是标识符字段。目前我只是试图拆分外部列表,以便最终得到一个代表以下内容的string list list list
:
1,ABC,3 2,ABC,2 3,DEF,2
1,DEF,3 2,XYZ,1 3,XYZ,2
1,XYZ,1
然后,上面的结果将被推送到我的Typed模型中并送入应用程序的其余部分。
答案 0 :(得分:1)
使用Seq.groupby
-
input
|> Seq.groupBy (fun (a,b,c) -> a)
|> Seq.toList
答案 1 :(得分:1)
在您的代码中:
csvRecords
|> Seq.groupBy (fun record -> (record.Item 0))
|> List.ofSeq
|> List.map(toTypedModel)
record.Item 0
不是获取列表第一个元素的好方法。您应该使用List.head
或模式匹配来实现此目的。
您的示例如下:
csvRecords
|> Seq.groupBy List.head
|> Seq.map toTypedModel
|> List.ofSeq
我还改变了顺序使用toTypedModel
的顺序,这有助于避免分配不必要的列表。