这是针对F#。
我有一个包含4行的.data文件: 城镇,人口,自治市,以及农村或城市类型的城镇。 我已经使用Int32.Parse解析了“population”列。
我的问题是,如何根据市政名称添加每一行的人口?也就是说,有几个城镇属于同一个城市,并希望添加这些人口在同一个城市。
这是我到目前为止的代码,感谢任何帮助:
open System
let rec convertDataRow(csvLine:string) =
let cells = List.ofSeq(csvLine.Split(','))
match cells with
| name :: popul :: county :: townorcommune :: _ ->
let parsedNumber = Int32.Parse(popul)
(name, parsedNumber, county, townorcommune)
| _ -> failwith "Incorrect data format!"
let rec processLines (lines) =
match lines with
| [] -> []
| currentLine :: remaining ->
let parsedLine = convertDataRow(currentLine)
let parsedRest = processLines(remaining)
parsedLine :: parsedRest
open System.IO
let lines = List.ofSeq(File.ReadAllLines(@"C:\Users\townspopulation.data"))
processLines(lines)
答案 0 :(得分:1)
提供一些指导。
使用Seq.groupBy
按名称对数据进行排序,然后您可以添加内容。像
Seq.groupBy (fun (a,_,_,_) -> a)
|> Seq.map (Seq.fold (fun (sum,_) (n,a,_,_) -> (sum+a),n) (0,""))
在这里,我们使用groupBy来获取按照我们想要的方式排序的数据,然后再使用地图并折叠以对总体进行求和