У меня есть функция, которая принимает список списков целых чисел, в частности Seq[Seq[Int]]
. Затем я беру эти данные из чтения текстового файла и используя split
, и который создает список Array
. Это не признано Scala, которое вызывает ошибку совпадения. Но либо IndexedSeq
, либо Array
остались в порядке с функцией Seq[Int]
, видимо, только вложенная коллекция является проблемой. Как я могу конвертировать неявно IndexedSeq[Array[Int]]
в Seq[Seq[Int]]
, или как еще я могу это сделать, кроме как использовать toList
, как показано ниже? Например, Iterable[Iterable[Int]]
кажется прекрасным, но я не могу это использовать.Как легко преобразовать IndexedSeq [Array [Int]] в Seq [Seq [Int]] в Scala?
scala> def g(x:Seq[Int]) = x.sum
g: (x: Seq[Int])Int
scala> g("1 2 3".split(" ").map(_.toInt))
res6: Int = 6
scala> def f(x:Seq[Seq[Int]]) = x.map(_.sum).sum
f: (x: Seq[Seq[Int]])Int
scala> f(List("1 2 3", "3 4 5").map(_.split(" ").map(_.toInt)))
<console>:9: error: type mismatch;
found : List[Array[Int]]
required: Seq[Seq[Int]]
f(List("1 2 3", "3 4 5").map(_.split(" ").map(_.toInt)))
^
scala> f(List("1 2 3", "3 4 5").map(_.split(" ").map(_.toInt).toList))
res8: Int = 18
Интересная проблема. Я думаю, что это больше связано с неизменяемыми коллекциями vs mutable, чем с чем-либо еще. – marios
Обратите внимание, как 'f (List (" 1,2,3 ".split (", "). Map (_. ToInt)," 1,2,3 ".split (", "). Map (_. ToInt))) 'фактически работает ... – marios
Сумасшедшая вещь, если вы _assign_ это и передаете значение как параметр, это не сработает. Но если вы встраиваете это выражение в вызов функции, это работает !! ?? Я предполагаю, что, разбив первую карту и запустив выражение внутри вызова функции, вывод типа и неявные преобразования по умолчанию могут работать с их магией, но не иначе ... Я не думаю, что когда-либо видел пример чего-то подобного раньше ! – dividebyzero