如何遍历scala中的列表列表

时间:2018-07-26 11:58:04

标签: scala

我想遍历list[List[String]]以将其子集成list[String],然后将列表中的每个列表存储在val中。 val的名称可以是任何名称,但应在名称中包含每个列表索引。

例如:

 val x: List[ List[String]] = List(List("Nike","Apple"), List("James", "Mike"))

所需的输出:

 group_0 : List[String] = List(Nike, Apple)
 group_1 = List[String] = List(James, Mike)

3 个答案:

答案 0 :(得分:0)

使用zipWithIndex并转换为Map[String, List[String]]。每个key的格式为group_0group_1

val map = x.zipWithIndex.map(x => s"group_${x._2}" -> x._1).toMap

使用键

访问每个列表
map("group_0")

Scala REPL

scala> x.zipWithIndex.map(x => s"group_${x._2}" -> x._1).toMap
res4: scala.collection.immutable.Map[String,List[String]] = Map(group_0 -> List(Nike, Apple), group_1 -> List(James, Mike))

scala> res4("group_0")
res6: List[String] = List(Nike, Apple)

scala> res4("group_1")
res7: List[String] = List(James, Mike)

@Manoj Kumar Dhakd建议使用toMap更好

答案 1 :(得分:0)

在列表中使用函数zipWithIndex和zip索引,然后使用map并创建Map

val listMap=x.zipWithIndex.map(grp=>"group_"+grp._2.toString->grp._1).toMap

如下所示显示您的输出

listMap.foreach(x=>println(x._1+"="+x._2))

//output:
group_0=List(Nike, Apple)
group_1=List(James, Mike)

答案 2 :(得分:0)

x.zipWithIndex.foreach{case (x,y)=>println("group_"+y+": List[String] = "+x)}

然后,在Scala REPL中:

scala>  val x: List[ List[String]] = List(List("Nike","Apple"), List("James", "Mike"))
x: List[List[String]] = List(List(Nike, Apple), List(James, Mike))

scala> x.zipWithIndex.foreach{case (x,y)=>println("group_"+y+": List[String] = "+x)}
group_0: List[String] = List(Nike, Apple)
group_1: List[String] = List(James, Mike)