0

これは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)
4

1 に答える 1

1

いくつかのガイダンスを提供します。

データを名前でソートするために使用Seq.groupByしてから、それらを追加できます。何かのようなもの

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

ここでは、map と fold を使用して人口を合計する前に、groupBy を使用してデータを必要な順に並べ替えます。

于 2013-10-03T12:03:05.650 に答える