Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何向列表的每个元素添加递增计数器_Scala - Fatal编程技术网

Scala 如何向列表的每个元素添加递增计数器

Scala 如何向列表的每个元素添加递增计数器,scala,Scala,我有: 我想要一个元组列表,比如: scala> val alphaList = List("a", "b") alphaList: List[java.lang.String] = List(a, b) 通常在Java中,我会执行以下操作: List((a,1),(b,2)) List alphaList=new ArrayList() 字母表。添加(“a”);字母表。添加(“b”); List newList=newarraylist(); 对于(int i=0;ii之后的所有内容

我有:

我想要一个元组列表,比如:

scala> val alphaList = List("a", "b")
alphaList: List[java.lang.String] = List(a, b)
通常在Java中,我会执行以下操作:

List((a,1),(b,2))
List alphaList=new ArrayList()
字母表。添加(“a”);字母表。添加(“b”);
List newList=newarraylist();
对于(int i=0;ii
我想了解的是,如何获得一个递增变量,以便在处理列表时使用

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);
zipWithIndex
将每个元素替换为其自身的元组及其索引(从0开始)。
map
匹配该元组,并创建一个索引递增1的新元组,以便从1开始,而不是从0开始

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

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

那么

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


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

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

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

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

这取决于映射实现:它是否按顺序处理Seq元素。我认为不需要做soI,我认为这应该确保序列。。。但是,非常有趣的解决方案。。。我不知道
x=>
之后的所有内容都会变成闭包,即使没有添加大括号。我不明白为什么会这样。Scala集合实现是非常常规的,只要不重新定义map,它就会以这种方式工作,但我不认为实现会被排除在外,否则会更有效。当然,它不适用于ParSeq,但我认为ParSeq不是Seq@didierd:你可能是对的,但我在任何地方的文档中都找不到明确的说明。这取决于映射实现:它是否按顺序处理Seq元素。我认为不需要做soI,我认为这应该确保序列。。。但是,非常有趣的解决方案。。。我不知道
x=>
之后的所有内容都会变成闭包,即使没有添加大括号。我不明白为什么会这样。Scala集合实现是非常常规的,只要不重新定义map,它就会以这种方式工作,但我不认为实现会被排除在外,否则会更有效。当然,它不适用于ParSeq,但我认为ParSeq不是Seq@didierd:您可能是对的,但我在文档中找不到明确的说明。但是,如果
Iterator.from(1)
编译,则会更好。事实上,这是我第一次尝试做的,我不明白为什么Iterator上不应提供此功能。抱歉,我的意思是
Iterable
。我想
中的
应该可以在
Iterable
上找到,这就是我要找的。我不太喜欢直接使用
Iterator
。不过,如果
Iterator.from(1)
编译会更好。事实上,这是我第一次尝试做的,我不明白为什么Iterator上不应该有这个功能。对不起,我的意思是
iteratable
。我想
中的
应该可以在
Iterable
上找到,这就是我要找的。我不太喜欢直接使用迭代器。