zipWithIndex有无案例

时间:2013-12-08 14:17:02

标签: scala collections

以下2段代码如何相同? (案例如何运作)

 list.zipWithIndex.flatMap{ 
     rowAndIndex =>
     rowAndIndex._1.zipWithIndex
}

list.zipWithIndex.flatMap {
    case (rowAndIndex, r) =>
     rowAndIndex.zipWithIndex
}

2 个答案:

答案 0 :(得分:4)

您可能会对第二个样本中的错误名称感到困惑。我改成了:

list.zipWithIndex.flatMap {
    case (row, index) =>
     row.zipWithIndex
}

这是以下版本的简短版本:

list.zipWithIndex.flatMap { rowAndIndex => 
  rowAndIndex match {
    case (row, index) => row.zipWithIndex
  }
}

答案 1 :(得分:1)

我更喜欢第一个,因为这里的每个元素都是case(rowAndIndex,r),每次看起来都没必要检查它。

而且,似乎你实际上并不想要第一个'索引',为什么不使用:

list.map(s => s.zipWithIndex).flatten

顺便说一句,我只是将以下代码放到http://scalass.com/tryout

val list = List("Abby", "Jim", "Tony")

val a = list.zipWithIndex.flatMap({a =>
  a._1.zipWithIndex})
println(a)

val b = list.zipWithIndex.flatMap({case (rowAndIndex, r) =>
  rowAndIndex.zipWithIndex})
println(b)

val d = list.map(s => s.zipWithIndex).flatten
println(d)

输出就像

List((A,0), (b,1), (b,2), (y,3), (J,0), (i,1), (m,2), (T,0), (o,1), (n,2), (y,3))

这就是你想要的,对吧?