2013-07-25 13 views
6

Jak można tę mapę z listy,Jak przenieść mapę z listy wartości w Scala

Map (
    "a" -> List(1, 2) 
) 

być transponowana do tej listy map głównie z wykorzystaniem metody z bibliotek Scala?

List(
    Map("a" -> 1), 
    Map("a" -> 2) 
) 

mogę zakodować rozwiązanie siebie, ale jestem bardziej zainteresowany wykorzystaniem funkcjonalności biblioteki więc preferowanym rozwiązaniem powinna korzystać z biblioteki Scala, gdzie to możliwe przy zachowaniu kompaktowych i umiarkowanie czytelne.

Ten drugi przykład ilustruje wymaganą transformację z mapą z więcej niż jednym wpisem.

Z tego

Map (
    10 -> List("10a", "10b", "10c"), 
    29 -> List("29a", "29b", "29c") 
) 

temu

List(
    Map(
    10 -> "10a", 
    29 -> "29a"), 
    Map(
    10 -> "10b", 
    29 -> "29b"), 
    Map(
    10 -> "10c", 
    29 -> "29c") 
) 

Można założyć, że wszystkie wartości są wykazy tej samej wielkości.

Opcjonalnie rozwiązanie może obsłużyć przypadek, w którym wartości są pustymi listami, ale nie jest to wymagane. Jeśli roztwór obsługuje pustych wartości lista potem to wejście,

Map (
    "a" -> List() 
) 

powinno skutkować List().

+2

Jest więcej * * transpozycja, niż * spłaszczyć * –

+0

Updated używać transpozycję. –

Odpowiedz

9
val m = Map (
    10 -> List("10a", "10b", "10c"), 
    29 -> List("29a", "29b", "29c") 
) 

m.map{ case (k, vs) => 
    vs.map(k -> _) 
}.toList.transpose.map(_.toMap) 

Zauważ, że ten obsługuje również swoją "pusty list" Sprawa

+0

To idealnie pasuje do moich wymagań i przechodzi wszystkie moje testy jednostkowe. –

Powiązane problemy