以下2段代码如何相同? (案例如何运作)
list.zipWithIndex.flatMap{
rowAndIndex =>
rowAndIndex._1.zipWithIndex
}
和
list.zipWithIndex.flatMap {
case (rowAndIndex, r) =>
rowAndIndex.zipWithIndex
}
答案 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))
这就是你想要的,对吧?