как добавить увеличенный счетчик к каждому элементу списка - PullRequest
1 голос
/ 21 октября 2011

У меня есть:

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);

Я пытаюсь понять, как получить инкрементную переменную, которую я могу использовать при обработке списка?

Ответы [ 3 ]

7 голосов
/ 21 октября 2011

Как альтернатива ответу Axel22, что хорошо:

alphaList.zip(Stream.from(1))
7 голосов
/ 21 октября 2011
alphaList.zipWithIndex.map {
  case (k, v) => (k, v + 1)
}

zipWithIndex заменяет каждый элемент на собственный кортеж и его индекс (начиная с 0).map соответствует кортежу и создает новый кортеж с индексом, увеличенным на 1, так что вы начинаете с 1, а не с 0.

1 голос
/ 21 октября 2011

Как насчет ...

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...