У меня есть:
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);
Я пытаюсь понять, как получить инкрементную переменную, которую я могу использовать при обработке списка?
Как альтернатива ответу Axel22, что хорошо:
alphaList.zip(Stream.from(1))
alphaList.zipWithIndex.map { case (k, v) => (k, v + 1) }
zipWithIndex заменяет каждый элемент на собственный кортеж и его индекс (начиная с 0).map соответствует кортежу и создает новый кортеж с индексом, увеличенным на 1, так что вы начинаете с 1, а не с 0.
zipWithIndex
map
Как насчет ...
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))