3

Dictionary<string, List<string>>在 C# 中,我可以很容易地构建一个。如果我正在阅读大型项目数据库,我可以执行以下操作:

var dict = new Dictionary<string, List<string>>();
foreach(string[] row in data)
   if (!dict.ContainsKey(row[0]))
      dict.add(row[0], new List<string>() { row };
   else
      dict[row[0]].add(row);

现在的问题是,我如何在 f# 中使用 immutable 执行此操作Map<string, string list>

4

2 回答 2

10
data
|> Seq.groupBy (fun row -> row.[0])
|> Map.ofSeq
于 2012-11-07T20:40:42.007 回答
4

这是一个更详细的解决方案,与您的 C# 示例非常相似:

data |> Seq.fold (fun map row -> 
                 match Map.tryFind row.[0] map with
                 | Some rows -> Map.add row.[0] (row::rows) map
                 | None -> Map.add row.[0] [row] map) Map.empty
于 2012-11-07T20:57:22.627 回答