Я попытался использовать Map.map для преобразования карты в список кортежей. Однако это не удается. Я сделал следующие эксперименты:Scala: на карте Карта на список кортежей
val m = Map(("a" -> 1), ("b" -> 2))
//> m : scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
val r1 = m.map{ case (k,v) => v} //> r1 : scala.collection.immutable.Iterable[Int] = List(1, 2)
def toTuple[A,B](a:A,b:B) = (a,b) //> toTuple: [A, B](a: A, b: B)(A, B)
//val r2: List[Tuple2[_,_]] = m.map(e => (e._1,e._2))
val r3 = m.map(e => toTuple(e._1,e._2)) //> r3 : scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
val r4 = m.toSeq //> r4 : Seq[(String, Int)] = ArrayBuffer((a,1), (b,2))
Обратите внимание, как создается список для отдельных элементов (R1), но карта производится для кортежей (r3). Даже не заставляя обрабатываемый тип (r2). Только явный вызов Seq сделал это (r4). Итак, мой вопрос: почему/как MapMap «автоматически» создает новую карту, а не список, например? Фактически, как определяется тип возврата (Seq, List и т. Д.)
Что не так с 'm.toList'? Также обратите внимание, что отображение в коллекции возвращает другую коллекцию того же типа, поэтому вы действительно не можете вернуть отображение списка на «Карта», если вы не назовете «.toList» на нем. –
@Ende - Ничего нехорошо. См. Комментарий ниже. – user2051561