English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
As listas Scala são semelhantes aos arrays, todas as suas elementos têm o mesmo tipo, mas também têm diferenças: as listas são imutáveis, uma vez definidas, os valores não podem ser alterados, e, em seguida, as listas têm uma estrutura recursiva (ou seja, estrutura de lista encadeada) enquanto os arrays não são..
A lista de elementos T pode ser escrita como List[T]. Por exemplo, a seguir estão listados vários tipos de listas:
// lista de strings val site: List[String] = List("w3codebox", "Google", "Baidu") // lista de inteiros val nums: List[Int] = List(1, 2, 3, 4) // lista vazia val empty: List[Nothing] = List() // lista bidimensional val dim: List[List[Int]] = List( List(1, 0, 0), List(0, 1, 0), List(0, 0, 1) )
os dois elementos básicos de construção de lista são Null e ::
Null também pode ser representado como uma lista vazia.
Os exemplos acima podem ser escritos da seguinte forma:
// lista de strings val site = "w3codebox" :: ("Google" :: ("Baidu" :: Nil)) // lista de inteiros val nums = 1 :::: (2 :::: (3 :::: (4 :::: Null))) // lista vazia val empty = Null // lista bidimensional val dim = (1 :::: (0 :: (0 :: Null))) :: (0 :: (1 :::: (0 :: Null))) :: (0 :: (0 :: (1 :: Null))) :::: Null
Scala lista três operações básicas:
head retorna o primeiro elemento da lista
tail retorna uma lista que contém todos os elementos exceto o primeiro
isEmpty retorna true quando a lista está vazia
Qualquer operação em lista Scala pode ser expressa usando essas três operações básicas. Exemplo a seguir:
// lista de strings object Test { def main(args: Array[String]) { val site = "w3codebox" :: ("Google" :: ("Baidu" :: Nil)) val nums = Null println( "o primeiro site é : " + site.head) println( "o último site é : " + site.tail) println( "verificar se a lista site está vazia : " + site.isEmpty) println( "verificar se nums está vazio : " + nums.isEmpty) } }
执行以上代码,输出结果为:
$ vim Test.scala $ scala Test.scala o primeiro site é : w3codebox o último site é : Lista(Google, Baidu) verificar se a lista site está vazia : false verificar se nums está vazio : true
Você pode usar :::: operador ou Lista.::::() método ou Lista.concat() método para conectar duas ou mais listas. Exemplo a seguir:
object Test { def main(args: Array[String]) { val site1 = "w3codebox" :: ("Google" :: ("Baidu" :: Nil)) val site2 = "Facebook" :::: ("Taobao" :::: Null) // usando o operador :::: var fruit = site1 :::: site2 println( "site1 :::: site2 : " + fruit ) // usando o método Lista.::::() fruit = site1.:::(site2) println( "site1.:::(site2): " + fruit ) // usando o método concat fruit = Lista.concat(site1, site2) println( "Lista.concat(site1, site2): " + fruit ) } }
执行以上代码,输出结果为:
$ vim Test.scala $ scala Test.scala site1 :::: site2 : Lista(w3codebox, Google, Baidu, Facebook, Taobao) site1.:::(site2): Lista(Facebook, Taobao, w3codebox, Google, Baidu) List.concat(site)1, site2) : List(w3codebox, Google, Baidu, Facebook, Taobao)
Podemos usar o método List.fill() para criar uma lista de elementos repetidos com uma quantidade especificada:
object Test { def main(args: Array[String]) { val site = List.fill(3)("w3codebox) // repetir w3codebox 3vezes println( "site : " + site ) val num = List.fill(10)(2) // elementos repetidos 2, 10 vezes println( "num : " + num ) } }
执行以上代码,输出结果为:
$ vim Test.scala $ scala Test.scala site : List(w3codebox, w3codebox, w3codebox) num : List(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
O método List.tabulate() cria uma lista através de uma função dada.
O primeiro parâmetro é o número de elementos, pode ser bidimensional, o segundo parâmetro é a função especificada, calculamos o resultado através da função especificada e inserimos o valor retornado na lista, o valor inicial é 0, veja o exemplo a seguir:
object Test { def main(args: Array[String]) { // Criar lista através de uma função dada 5 elementos val quadrados = List.tabulate(6)(n => n * n) println( "Unidimensional : " + quadrados ) // Criar lista bidimensional val mul = List.tabulate( 4,5 )( _, * _ ) println( "Multidimensional : " + mul ) } }
执行以上代码,输出结果为:
$ vim Test.scala $ scala Test.scala Unidimensional : List(0, 1, 4, 9, 16, 25) Multidimensional : List(List(0, 0, 0, 0, 0), List(0, 1, 2, 3, 4), List(0, 2, 4, 6, 8), List(0, 3, 6, 9, 12))
List.reverse é usado para inverter a ordem da lista, veja o exemplo a seguir:
object Test { def main(args: Array[String]) { val site = "w3codebox" :: ("Google" :: ("Baidu" :: Nil)) println( "site 反转前 : " + site ) println( "site 反转后 : " + site.reverse ) } }
执行以上代码,输出结果为:
$ vim Test.scala $ scala Test.scala site 反转前 : List(w3codebox, Google, Baidu) site reverso : List(Baidu, Google, w3codebox)
A tabela a seguir lista os métodos comuns de Scala List:
número | métodos e descrições |
---|---|
1 | def +: (elem: A): List[A] adiciona elementos pré-definidos à lista scala> val x = List(1) x: List[Int] = List(1) scala> val y = 2 +: x y: List[Int] = List(2, 1) scala> println(x) List(1) |
2 | def ::(x: A): List[A] adiciona elementos no início da lista |
3 | def :::(prefix: List[A]): List[A] adiciona os elementos da lista especificada no início da lista |
4 | def :+(elem: A): List[A] copia a lista após adicionar elementos. scala> val a = List(1) a: List[Int] = List(1) scala> val b = a :+ 2 b: List[Int] = List(1, 2) scala> println(a) List(1) |
5 | def addString(b: StringBuilder): StringBuilder adiciona todos os elementos da lista ao StringBuilder |
6 | def addString(b: StringBuilder, sep: String): StringBuilder adiciona todos os elementos da lista ao StringBuilder, especificando o separador |
7 | def apply(n: Int): A obtém o elemento pelo índice da lista |
8 | def contains(elem: Any): Boolean deteta se a lista contém o elemento especificado |
9 | def copyToArray(xs: Array[A], start: Int, len: Int): Unit copia os elementos da lista para um array. |
10 | def distinct: List[A] remove elementos repetidos da lista e retorna uma nova lista |
11 | def drop(n: Int): List[A] descarta os primeiros n elementos e retorna uma nova lista |
12 | def dropRight(n: Int): List[A] descarta os últimos n elementos e retorna uma nova lista |
13 | def dropWhile(p: (A) => Boolean): List[A] Descartar elementos da esquerda para a direita até que a condição p não seja mais válida |
14 | def endsWith[B](that: Seq[B]): Boolean Verificar se a lista termina com a sequência especificada |
15 | def equals(that: Any): Boolean Verificar se é igual |
16 | def exists(p: (A) => Boolean): Boolean Verificar se existe algum elemento na lista que atenda à condição especificada. Verificar se l contém algum elemento: scala> l.exists(s => s == "Hah") res7: Boolean = true |
17 | def filter(p: (A) => Boolean): List[A] Emitir todos os elementos que atendem ao símbolo especificado da condição. Filtrar elementos de comprimento3dos elementos: scala> l.filter(s => s.length == 3) res8: List[String] = List(Hah, WOW) |
18 | def forall(p: (A) => Boolean): Boolean Detectar todos os elementos. Por exemplo: verificar se todos os elementos começam com "H": scala> l.forall(s => s.startsWith("H")) res10: Boolean = false |
19 | def foreach(f: (A) => Unit): Unit Aplicar a função a todos os elementos da lista |
20 | def head: A Obter o primeiro elemento da lista |
21 | def indexOf(elem: A, from: Int): Int A partir da posição especificada from Começar a procurar a primeira ocorrência do elemento |
22 | def init: List[A] Retornar todos os elementos, exceto o último |
23 | def intersect(that: Seq[A]): List[A] Calcular a interseção de múltiplas conjuntos |
24 | def isEmpty: Boolean Detectar se a lista está vazia |
25 | def iterator: Iterator[A] Criar um novo iterador para iterar pelos elementos |
26 | def last: A Retornar o último elemento |
27 | def lastIndexOf(elem: A, end: Int): Int Procurar a última ocorrência do elemento na posição especificada end |
28 | def length: Int Retornar o comprimento da lista |
29 | def map[B](f: (A) => B): List[B] Recalcular todos os elementos através do método fornecido |
30 | def max: A Procurar o maior elemento |
31 | def min: A Localiza o menor elemento |
32 | def mkString: String Exibe todos os elementos da lista como uma string |
33 | def mkString(sep: String): String Exibe todos os elementos da lista como uma string usando o delimitador |
34 | def reverse: List[A] Inversão da lista |
35 | def sorted[B >: A]: List[A] Ordenação da lista |
36 | def startsWith[B](that: Seq[B], offset: Int): Boolean Verifica se a lista contém a sequência especificada no local especificado |
37 | def sum: A Calcula a soma dos elementos do conjunto |
38 | def tail: List[A] Retorna todos os elementos, exceto o primeiro |
39 | def take(n: Int): List[A] Extrai os n primeiros elementos da lista |
40 | def takeRight(n: Int): List[A] Extrai os n últimos elementos da lista |
41 | def toArray: Array[A] Conversão de Lista para Array |
42 | def toBuffer[B >: A]: Buffer[B] Retorna um Buffer que contém todos os elementos da lista |
43 | def toMap[T, U]: Map[T, U] Conversão de Lista para Map |
44 | def toSeq: Seq[A] Conversão de Lista para Seq |
45 | def toSet[B >: A]: Set[B] Conversão de Lista para Set |
46 | def toString(): String Conversão de Lista para String |
Mais métodos podem ser consultados Documentação da API