我是函数式编程范例和Scala的新手。我正在尝试使用scala解决一个问题。我有一个包含图形边的文本文件,格式如下:
3, 5
4, 6
7, 8在图中,3,5表示从3到5的边,我使用type的Map[Vertex,List[Vertex]]来处理图。我的方法是使用foreach逐行读取并处理它,我认为这不是一种函数式方法。在这方面的任何帮助都是非常感谢的。
发布于 2018-11-01 06:30:48
我将把文件读取留给您,因为有许多方法可以根据您的特定应用程序进行读取。你可能会发现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)即可。
https://stackoverflow.com/questions/53092130
复制相似问题