scala - 将列表列表转换为 Map 时“无法证明”
问题描述
我的 Scala 代码中有一个顽固的错误,如下所示。在 reduceDataToMap 中,我想遍历 someData.data 的第一个维度(即行)并将它们作为值放入 Map 中,该 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 值?但我真的在这里猜测,任何帮助将不胜感激。
解决方案
下面的代码创建了两个元素的列表
List(someData.dataCols, row)
如果dataCols
和内部data
列表具有相同的大小,您可以zip
列出:
someData.data.map(row => someData.dataCols.zip(row).toMap)
推荐阅读
- javascript - 在开发人员控制台的 AngularJS 应用程序对象中,哪里可以找到声明的变量及其值?
- r - 构建反应数据错误:“'closure'类型的对象不是子集”
- java - 在 mysql 中选择特定表中的操作时触发电子邮件或信息
- ldap - 将用户导入 LDAP 服务器
- html - Ionic 4 - 根据用户打开页面的日期自动滚动到某个部分
- google-maps - Google Places API 响应结构已更改 - 从预测中删除了 ID 字段
- jquery-forms-plugin - 使用 jquery 表单插件时无法将附加数据(对象)发送到后端:ajaxSubmit
- sql-server - 用于查找非空值和空值的正则表达式
- echo - 使用大于 Windows 命令长度限制的输入字符串将输出回显到文件
- haskell - 尽管在量化约束中被提及,但 GHC 无法推断存在实例