Scala将键的所有映射值添加到队列

时间:2018-11-20 14:02:48

标签: scala dictionary queue breadth-first-search

我目前正在学习如何实现小广度优先算法。我想将“您”的值(邻居)添加到搜索队列中。 “ + =”操作不起作用..知道如何解决吗?

import scala.collection.mutable.Map
import scala.collection.mutable.Queue

// creating a hash table (allowing to set a map of key, value)
val graph = Map("you" -> ("bob", "claire", "alice"), "alice" -> ("peggy"), "bob" -> ("peggy", "anuj"), "claire" -> ("jonny", "thom"))

graph("bob") // prints the neighbors of "bob"
var search_queue = new Queue[]()
search_queue += graph("you")
println(search_queue)

1 个答案:

答案 0 :(得分:2)

您有几个问题。

首先,您的graph 地图字符串 变为元组 。但是由于您的元组大小不同,编译器最终会推断出java.io.Serializable-我将使用 List 或其他集合作为值。

第二,您可以使用empty constructor而不是new来实例化search_queue

第三,如果要将多个值添加到可变集合中,可以使用++= operator,而不是循环每个值并使用+=

第四,您只需要集合是可变的,而不是对其的引用-因此您可以使用val

也许这段代码可以为您提供帮助。

import scala.collection.mutable.Queue

val graph = Map(
  "you" -> List("bob", "claire", "alice"),
  "alice" -> List("peggy"),
  "bob" -> List("peggy", "anuj"),
  "claire" -> List("jonny", "thom")
)

val searchQueue = Queue.empty[String]

searchQueue ++= graph.getOrElse("you", List.empty[String])
// searchQueue = Queue(bob, claire, alice)