¿Cómo en el mundo obtienes solo un elemento en el índice i de la Lista en scala?
Lo intenté get(i)
y [i]
... nada funciona. Buscar en Google solo devuelve cómo "encontrar" un elemento en la lista. ¡Pero ya sé el índice del elemento!
Aquí está el código que no se compila:
def buildTree(data: List[Data2D]):Node ={
if(data.length == 1){
var point:Data2D = data[0] //Nope - does not work
}
return null
}
Mirar la API de la Lista no ayuda, ya que mis ojos se cruzan.
Respuestas:
Use paréntesis:
Pero realmente no desea hacer eso con listas muy a menudo, ya que las listas enlazadas tardan en recorrerlas. Si desea indexar en una colección, use
Vector
(inmutable) oArrayBuffer
(mutable) o posiblementeArray
(que es solo una matriz de Java, excepto que nuevamente lo indexa con en(i)
lugar de[i]
).fuente
ArrayBuffer
funciona comoArrayList
.Vector
funciona como un inmutable:ArrayList
puedes leer, pero no puedes escribir sin crear uno nuevo.ArrayBuffer
a unIndexedSeq
uso.toIndexedSeq
;IndexedSeq
Es el tipo más genérico. (En este caso, resulta que se implementa como aVector
.)IndexedSeq
Es el supertipo de colecciones a las que es razonable indexar. Además, tenga en cuenta que podría hacerloVector() ++ myArrayBuffer
, lo que funcionará para casi cualquier colección (en cualquier lado).++
crea una nueva colección a partir de las dos que especifique, conservando el tipo de la de la izquierda.Vector()
es el vector vacío, por lo que produciría lo que quieres.Es más seguro usarlo
lift
para que pueda extraer el valor si existe y fallar con gracia si no es así.Esto devolverá None si la lista no es lo suficientemente larga como para proporcionar ese elemento, y Some (value) si lo es.
Cada vez que realiza una operación que puede fallar de esta manera, es genial usar una Opción y obtener el sistema de tipos para ayudar a asegurarse de que está manejando el caso donde el elemento no existe.
Explicación:
Esto funciona porque la Lista
apply
(que azucara solo entre paréntesis, por ejemplol(index)
) es como una función parcial que se define donde la lista tiene un elemento. ElList.lift
método convierte laapply
función parcial (una función que solo se define para algunas entradas) en una función normal (definida para cualquier entrada) básicamente envolviendo el resultado en una Opción.fuente
¿Por qué paréntesis?
Aquí está la cita de la programación del libro en scala .
Aquí hay algunos ejemplos de cómo extraer cierto elemento (primer elemento en este caso) usando un estilo de programación funcional.
fuente
Utilice paréntesis () para acceder a los elementos de la lista nombre_lista (índice)
fuente
Esta es la forma preferida de acceder a los datos de una Lista a través del índice hoy en día:
Pero al igual que Rex Kerr mencionado anteriormente: Si está utilizando índices, debería considerar usar Vector en lugar de una Lista.
fuente