«Не удается доказать» при преобразовании списка списков в карту - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть упрямая ошибка в моем коде Scala, точно воспроизведенная ниже. В reduDataToMap я хотел бы выполнить итерацию по первому измерению someData.data (ie, строки) и поместить их в качестве значений на карту, в которой в качестве ключей используются заголовки столбцов.

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, и поэтому он не уверен, что они могут составлять Значение карты? Но я действительно догадываюсь здесь, и любая помощь будет высоко ценится.

1 Ответ

2 голосов
/ 22 апреля 2020

Код ниже создает список из двух элементов

List(someData.dataCols, row)

Если dataCols и внутренние data списки имеют одинаковый размер, вы можете zip эти списки:

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