2013-10-03 64 views
0

這是針對F#的。在F#中添加基於其他行值的行的值

我有一個.data文件,它有4行: 城鎮,人口,城市,以及農村或城鎮類型的城鎮。 我已經使用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) 

回答

1

提供一些指導。

使用Seq.groupBy按名稱排序數據,然後您可以添加。喜歡的東西

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

這裏我們使用GROUPBY度日我們想要的數據排序,使用地圖和摺疊總結人口

+0

有一個更短的一行這一點,但我聞到前家庭作業。 – Daniel