预期 Map[] 但找到 List[Map[]]

Expected Map[] but Found List[Map[]]

scala 程序正在遍历单词列表,如果已经找到,则在单词后附加值,否则添加 key->word。预计会生成 Map[],但会生成 List[Map[]]。

    val hashmap:Map[List[(Char, Int)], List[String]]=Map()
    for (word <- dictionary) yield {
      val word_occ = wordOccurrences(word)
      hashmap + (if (hashmap.contains(word_occ)) (word_occ -> (hashmap(word_occ) ++ List(word))) else (word_occ -> List(word)))
    }

for 对单个 <- 生成器的理解将对原始集合的 map() 调用脱糖。而且,您会记得,map() 可以更改集合的元素,但不会更改集合类型本身。

因此,如果 dictionaryList,那么您最终得到的将是 Listyield 指定结果 List.

中的下一个元素是什么

在您的例子中,代码正在为 dictionary 中的每个元素创建一个新的单元素 Map。可能不是你想要的。我建议您尝试使用 foldLeft().

请注意,在这种情况下,您可能希望一次性构建 Map 而不是修改可变的 Map:

val hashmap:Map[List[(Char, Int)], List[String]]=
  dictionary
    .map(x => (wordOccurrences(x), x))
    .groupBy(_._1)
    .map { case (k, v) => k -> v.map(_._2) }

在 Scala 2.13 中,您可以将最后两行替换为

    .groupMap(_._1)(_._2)

如果性能是一个重要问题,您还可以在 dictionary 上使用 view 来避免创建中间列表。