如何将增量计数器添加到列表的每个元素

时间:2011-10-21 07:37:16

标签: scala

我有:

scala> val alphaList = List("a", "b")
alphaList: List[java.lang.String] = List(a, b)

我想要一个像元组列表:

List((a,1),(b,2))

通常在Java中我会做类似的事情:

List alphaList = new ArrayList<String>()
alphaList.add("a");alphaList.add("b");
List newList = new ArrayList<String>();
for ( int i = 0; ii < alphaList.size(); i++ )
  newList.add(alphaList[i] + i);

我想要了解的是,如何处理List时可以使用的递增变量?

3 个答案:

答案 0 :(得分:7)

alphaList.zipWithIndex.map {
  case (k, v) => (k, v + 1)
}

zipWithIndex用自身的元组及其索引(从0开始)替换每个元素。 map匹配元组,并创建一个索引递增1的新元组,以便从1开始,而不是从0开始。

答案 1 :(得分:7)

作为Axel22答案的替代方案,这很好:

alphaList.zip(Stream.from(1))

答案 2 :(得分:1)

怎么样......

def zipWithIndex1[A](xs:Seq[A]) = xs.map{var i = 0; x => i+=1; (x,i)}

测试:

zipWithIndex1("sdlfkjsdlf")
//--> Vector((s,1), (d,2), (l,3), (f,4), (k,5), (j,6), (s,7), (d,8), (l,9), (f,10))