【问题标题】:Creating graph from text file functionally using scala使用 scala 从文本文件功能性地创建图形
【发布时间】:2018-11-01 06:30:48
【问题描述】:
我是函数式编程范式和 Scala 的新手。我正在尝试使用 scala 解决问题。我有一个包含以下格式的图形边缘的文本文件:
3, 5
4, 6
7, 8
其中3,5 表示图中从3 到5 的边
我正在使用Map[Vertex,List[Vertex]] 的type 来处理图表。我的方法是使用foreach 逐行阅读并处理它,我认为这不是一种实用的方法。对此的任何帮助表示赞赏。
【问题讨论】:
标签:
scala
functional-programming
【解决方案1】:
我将把文件留给您阅读,因为根据您的特定应用程序有很多方法可以做到这一点。 Here 是您可能会发现对它有用的一个来源。
假设您已设法将文件读入Array[(Int, Int)],即元组数组,在您的示例Array((3,5), (4,6), (7,8)) 中,我们可以将其转换为您正在寻找的adjacency map,如下所示:
arr.groupBy(_._1).mapValues(arr => arr.map(_._2))
说明:
我们首先按第一个元素 (._1) 对元组进行分组。这会生成一个Map[Int, Array[(Int, Int)]],表示从每个顶点到其所有边的映射。
接下来,由于我们将数组转换为不包含完整的边信息(u,v),而只包含与该边对应的相邻顶点v。
我们完成了!
注意:这是假设您的图表是有向的。如果你想把它变成一个无向图,你可以简单地为每个(u,v)添加(v,u)。