Como você obtém apenas um elemento no índice i da Lista em scala?
Eu tentei get(i)
e [i]
- nada funciona. O Google retorna apenas como "encontrar" um elemento na lista. Mas eu já sei o índice do elemento!
Aqui está o código que não compila:
def buildTree(data: List[Data2D]):Node ={
if(data.length == 1){
var point:Data2D = data[0] //Nope - does not work
}
return null
}
Olhar para a lista api não ajuda, pois meus olhos simplesmente se cruzam.
Respostas:
Use parênteses:
Mas você realmente não quer fazer isso com listas com muita frequência, pois as listas vinculadas levam tempo para serem percorridas. Se você deseja indexar em uma coleção, use
Vector
(imutável) ouArrayBuffer
(mutável) ou possivelmenteArray
(que é apenas uma matriz Java, mas novamente você indexa nela com em(i)
vez de[i]
).fonte
ArrayBuffer
funciona comoArrayList
.Vector
funciona como um imutável - vocêArrayList
pode ler, mas não pode escrever sem criar um novo.ArrayBuffer
para umIndexedSeq
uso.toIndexedSeq
;IndexedSeq
é o tipo mais genérico. (Nesse caso, ele acaba sendo implementado como aVector
.)IndexedSeq
É o supertipo de coleções razoáveis para indexação. Além disso, observe que você pode fazer issoVector() ++ myArrayBuffer
, o que funcionará em quase todas as coleções (em ambos os lados).++
cria uma nova coleção a partir das duas que você especificar, preservando o tipo da que está à esquerda.Vector()
é o vetor vazio, portanto produziria o que você deseja.Mais seguro é usar
lift
para que você possa extrair o valor, se ele existir, e falhar normalmente, se não existir.Isso retornará None se a lista não for longa o suficiente para fornecer esse elemento e Some (value) se for.
Sempre que você estiver executando uma operação que pode falhar dessa maneira, é ótimo usar uma Opção e obter o sistema de tipos para ajudar a garantir que você esteja lidando com o caso em que o elemento não existe.
Explicação:
Isso funciona porque a lista
apply
(que inclui apenas parênteses, por exemplol(index)
) é como uma função parcial que é definida sempre que a lista tiver um elemento. OList.lift
método transforma aapply
função parcial (uma função que é definida apenas para algumas entradas) em uma função normal (definida para qualquer entrada), envolvendo basicamente o resultado em uma Opção.fonte
Por que parênteses?
Aqui está a citação da programação do livro em scala .
Aqui estão alguns exemplos de como extrair determinado elemento (primeiro elem neste caso) usando o estilo de programação funcional.
fonte
Use parênteses () para acessar os elementos da lista list_name (index)
fonte
Esta é a maneira preferida de acessar dados de uma lista via índice hoje em dia:
Mas, como Rex Kerr mencionou acima: Se você estiver usando índices, considere usar Vector em vez de uma Lista.
fonte