Scala: Каков идиоматический синтаксис для преобразования вложенных коллекций? - PullRequest
2 голосов
/ 09 июля 2010

Например: у меня есть список карт, и я хотел бы создать список из значений 3-го «столбца» карт ...

val l = List(Map(1 -> "test", 2 -> "test", 3 -> "test"), Map(4 -> "test", 5 -> "test", 6 -> "test"))

Ответы [ 2 ]

6 голосов
/ 09 июля 2010

Ким, нам нужно почти бесконечное количество «держи меня за руку» простых решений Scala, размещенных в Интернете, чтобы младшие программисты могли их найти и начать с нуля.Здесь мы идем:

Может быть, это то, что вы хотите:

 scala> val l = List(Map(1 -> "test1", 2 -> "test2", 3 -> "test3"), 

    | Map(1 -> "test4", 2 -> "test5", 3 -> "test6"))

>l: List[scala.collection.immutable.Map[Int,java.lang.String]] = List(Map(1 -> test1, 2 -> test2, 3 -> test3), Map(1 -> test4, 2 -> test5, 3 -> test6))

Вы можете получить третий «ряд», как это:

scala> l.map( numMap => numMap(3))

res1: List[java.lang.String] = List(test3, test6)
6 голосов
/ 09 июля 2010

Ну, на картах нет порядка, так что часть третьего вопроса в вашем вопросе не имеет смысла. Если вы имеете в виду что-то вроде «вернуть список значений, имеющих ключ карты 3»), то вы можете сделать это

    val l = List(Map(1 -> "test1", 2 -> "test2", 3 -> "test3"), Map(1 -> "test4", 2 -> "test5", 3 -> "test6"))

    val thirdArgs= for(map<-l; value <-map.get(3)) yield value
   // or equivalently val thirdArgs= l.flatMap(_.get(3))

    println(thirdArgs)// prints List(test3, test6)

Это зависит от того факта, что map.get (3) возвращает Option [String], а синтаксис для понимания в Scala работает с Option.

Если вы на самом деле имели в виду «третий столбец», то структура данных, которую вы хотите, - это не карта, а кортеж.

val l = List(("test1","test2","test3"), ("test4","test5", "test6"))

val thirdArgs= for(tuple<-l) yield tuple._3
// or equivalently val thirdArgs= l.map(_._3)
println(thirdArgs)// prints List(test3, test6)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...