首页 > 解决方案 > 将列表列表转换为 Map 时“无法证明”

问题描述

我的 Scala 代码中有一个顽固的错误,如下所示。在 reduceDataToMap 中,我想遍历 someData.data 的第一个维度(即行)并将它们作为值放入 M​​ap 中,该 Map 以列标题作为键。

object Test {

  type Header = String
  type DataObj = Int
  type ReducedRow = Map[Header, DataObj]

  case class SomeData(
    dataCols: List[Header],
    data: List[List[DataObj]]
  )

  def reduceDataToMap(someData: SomeData): List[ReducedRow] = {
    someData.data.map(row => List(someData.dataCols, row).toMap
    )
  }
}

相反,它吐出错误:

Cannot prove that List[Any] <:< (K, V).

听起来好像编译器无法推断出 someData.data 中实际元素的类型,因此不确定它们是否可以构成 Map 值?但我真的在这里猜测,任何帮助将不胜感激。

标签: scaladictionary

解决方案


下面的代码创建了两个元素的列表

List(someData.dataCols, row)

如果dataCols和内部data列表具有相同的大小,您可以zip列出:

someData.data.map(row => someData.dataCols.zip(row).toMap)

推荐阅读