English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala List(lista)

Conjunto Scala

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

operações básicas da lista

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

para conectar listas

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)

List.fill()

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)

List.tabulate()

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

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)

Métodos comuns de Scala List

A tabela a seguir lista os métodos comuns de Scala List:

númeromé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

Conjunto Scala