scala中实现图形的子类列表
我正在研究如何在scala中实现一个图,我真正想要的是一个边列表(假设已经定义),就像一个列表[Edge],但是有一些额外的方法,例如返回所有顶点。但是列表是密封的(最终的?),不能再分类 我该怎么做呢scala中实现图形的子类列表,scala,oop,graph,Scala,Oop,Graph,我正在研究如何在scala中实现一个图,我真正想要的是一个边列表(假设已经定义),就像一个列表[Edge],但是有一些额外的方法,例如返回所有顶点。但是列表是密封的(最终的?),不能再分类 我该怎么做呢 object Main { implicit def listToGraph(list: List[Edge]): Graph = new Graph(list) class Graph(e: List[Edge]) { def vertices() = (e.map(_.v
object Main {
implicit def listToGraph(list: List[Edge]): Graph = new Graph(list)
class Graph(e: List[Edge]) {
def vertices() = (e.map(_.v1) ++ e.map(_.v2)).distinct
}
case class Edge(v1: Long, v2: Long)
def main(args: Array[String]): Unit = {
val e: List[Edge] = List(Edge(0, 1), Edge(0, 2))
e.vertices.foreach(println)
}
}
这段代码是有效的——从某种意义上说,我可以调用
列表[Edge]
上的顶点,但我真正想做的是创建一个名为Graph的类,在这个类上我可以调用列表[Edge]中的任何方法
和顶点
通过将图形隐式转换为列表,您可以更好地为解决方案建模:
case class Edge(v1: Long, v2: Long)
case class Graph(e: List[Edge]) {
def vertices() = (e.map(_.v1) ++ e.map(_.v2)).distinct
}
implicit def graphToList(graph: Graph): List[Edge] = graph.e
val g = Graph(List(Edge(0, 1), Edge(0, 2)))
g.head // use graph as a list
当你尝试时会发生什么?你确实意识到,你可以用写问题所需时间的一半来尝试这个方法,而且你可以在几毫秒内得到答案,而不必等待几个小时,甚至根本没有什么用处。