0

这适用于 F#。

我有一个 .data 文件,它有 4 行:城镇、人口、自治市和农村或城市类型的城镇。我已经使用 Int32.Parse 解析了“人口”列。

我的问题是,如何根据自治市名称添加每一行的人口?也就是说,有几个城镇属于同一个自治市,并且想要添加这些位于同一个自治市的人口。

这是我到目前为止的代码,感谢您的帮助:

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)
4

1 回答 1

1

提供一些指导。

使用Seq.groupBy按名称对数据进行排序,然后您可以添加内容。就像是

Seq.groupBy (fun (a,_,_,_) -> a) 
|> Seq.map (Seq.fold (fun (sum,_) (n,a,_,_) -> (sum+a),n) (0,""))

在这里,我们使用 groupBy 来获取按我们想要的排序的数据,然后使用 map 和 fold 来汇总人口

于 2013-10-03T12:03:05.650 回答