¿Hay alguna Lista / Secuencia incorporada que se comporte mapy proporcione también el índice del elemento?
                99
            
  
            ¿Hay alguna Lista / Secuencia incorporada que se comporte mapy proporcione también el índice del elemento?
Creo que estás buscando zipWithIndex?
scala> val ls = List("Mary", "had", "a", "little", "lamb")
scala> ls.zipWithIndex.foreach{ case (e, i) => println(i+" "+e) }
0 Mary
1 had
2 a
3 little
4 lamb
De: http://www.artima.com/forums/flat.jsp?forum=283&thread=243570
También tienes variaciones como:
for((e,i) <- List("Mary", "had", "a", "little", "lamb").zipWithIndex) println(i+" "+e)o:
List("Mary", "had", "a", "little", "lamb").zipWithIndex.foreach( (t) => println(t._2+" "+t._1) )
zipWithIndexmétodo para obtener el índice dentro de un bucle / mapa / lo que sea.whilebucle, que probablemente se encuentre entre las opciones más rápidas.viewusted debería poder evitar crear y atravesar una Lista adicional.Utilizar . mapa en. zipWithIndex
Resultado:
fuente
maparchivo tal como se solicitó en lugar de solo imprimir dentro de un archivoforeach.Las soluciones propuestas adolecen del hecho de que crean colecciones intermedias o introducen variables que no son estrictamente necesarias. Porque, en última instancia, todo lo que necesita hacer es realizar un seguimiento del número de pasos de una iteración. Esto se puede hacer mediante la memorización. El código resultante podría verse así
La
doIndexed-Función envuelve la función interior que recibe tanto un índice como los elementos demyIterable. Esto puede resultarle familiar gracias a JavaScript.He aquí una forma de lograr este propósito. Considere la siguiente utilidad:
Esto ya es todo lo que necesitas. Puede aplicar esto, por ejemplo, de la siguiente manera:
que resulta en la lista
De esta manera, puede usar las funciones habituales de Traversable a expensas de envolver su función efectiva. La sobrecarga es la creación del objeto de memorización y el contador que contiene. De lo contrario, esta solución es tan buena (o mala) en términos de memoria o rendimiento como el uso sin indexar
map. ¡Disfrutar!fuente
coll.view.zipWithIndexlugar decoll.zipWithIndexHay
CountedIteratoren 2.7.x (que puede obtener de un iterador normal con .counted). Creo que ha quedado obsoleto (o simplemente se ha eliminado) en 2.8, pero es bastante fácil lanzar el suyo. Necesita poder nombrar el iterador:fuente
O, asumiendo que su colección tiene un tiempo de acceso constante, podría mapear la lista de índices en lugar de la colección real:
fuente
ls.indices.map(i => doStuffWithElem(i, ls(i))indicesse implementa,0 until lengthes más o menos lo mismo: PListfue realmente pobre. Sin embargo, mencioné que esto es adecuado si su colección tiene un tiempo de acceso constante. Debería haber elegidoArray.Utilice .map en .zipWithIndex con estructura de datos de mapa
Resultados
fuente
Hay dos formas de hacer esto.
ZipWithIndex: crea un contador que comienza automáticamente con 0.
La salida de ambos códigos será:
Zip : use el método zip con un Stream para crear un contador. Esto le brinda una forma de controlar el valor inicial.
Resultado:
fuente
Si también necesita buscar los valores del mapa (como tuve que hacerlo):
fuente