Compartilhar via


Tipos de coleção de F#

Ao examinar este tópico, você pode determinar qual tipo de coleção F# melhor atende a uma necessidade específica. Esses tipos de coleção diferem dos tipos de coleção no .NET, como aqueles no namespace System.Collections.Generic, na medida em que os tipos de coleção F# são projetados de uma perspectiva de programação funcional em vez de uma perspectiva orientada a objetos. Mais especificamente, somente a coleção de matrizes tem elementos mutáveis. Portanto, ao modificar uma coleção, você cria uma instância da coleção modificada em vez de alterar a coleção original.

Os tipos de coleção também diferem no tipo de estrutura de dados na qual os objetos são armazenados. Estruturas de dados como tabelas de hash, listas vinculadas e matrizes têm características de desempenho diferentes e um conjunto diferente de operações disponíveis.

Tabela de tipos de coleção

A tabela a seguir mostra os tipos de coleção de F#.

Tipo Descrição Links relacionados
Lista Uma série ordenada e imutável de elementos do mesmo tipo. Implementado como uma lista vinculada. Listas

Módulo de Lista
Matriz Uma coleção mutável de tamanho fixo, com base em zero, de elementos de dados consecutivos que são todos do mesmo tipo. Matrizes

Módulo da matriz

Módulo Array2D

Módulo Array3D
seq Uma série lógica de elementos que são todos de um tipo. As sequências são particularmente úteis quando você tem uma grande coleção ordenada de dados, mas não necessariamente espera usar todos os elementos. Elementos de sequência individuais são computados apenas conforme necessário, portanto, uma sequência pode ter um desempenho melhor do que uma lista, se nem todos os elementos forem usados. As sequências são representadas pelo tipo seq<'T>, que é um alias para IEnumerable<T>. Portanto, qualquer tipo do .NET Framework que implementa System.Collections.Generic.IEnumerable<'T> pode ser usado como uma sequência. Sequências

Módulo Seq
Mapa Um dicionário imutável de elementos. Os elementos são acessados por chave. Módulo de Mapa
Conjunto Um conjunto imutável baseado em árvores binárias, em que a comparação é a função de comparação estrutural F#, que potencialmente usa implementações da interface System.IComparable em valores de chave. Definir módulo

Tabela de funções

Esta seção compara as funções que estão disponíveis nos tipos de coleção de F#. A complexidade computacional da função é fornecida, em que N é o tamanho da primeira coleção e M é o tamanho da segunda coleção, se houver. Um traço (-) indica que essa função não está disponível na coleção. Como as sequências são avaliadas lentamente, uma função como Seq.distinct pode ser O(1) porque retorna imediatamente, embora ainda afete o desempenho da sequência quando enumerada.

Função Matriz Lista Sequência Mapa Conjunto Descrição
acrescentar O(N) O(N) O(N) - - Retorna uma nova coleção que contém os elementos da primeira coleção seguidos por elementos da segunda coleção.
adicionar - - - O(log(N)) O(log(N)) Retorna uma nova coleção com o elemento adicionado.
média O(N) O(N) O(N) - - Retorna a média dos elementos na coleção.
averageBy O(N) O(N) O(N) - - Retorna a média dos resultados da função fornecida aplicada a cada elemento.
blit O(N) - - - - Copia uma seção de uma matriz.
cache - - O(N) - - Calcula e armazena elementos de uma sequência.
cast - - O(N) - - Converte os elementos para o tipo especificado.
choose O(N) O(N) O(N) - - Aplica a função fornecida f a cada elemento x da lista. Retorna a lista que contém os resultados de cada elemento em que a função retorna Some(f(x)).
collect O(N) O(N) O(N) - - Aplica a função fornecida a cada elemento da coleção, concatena todos os resultados e retorna a lista combinada.
compareWith - - O(N) - - Compara duas sequências usando a função de comparação fornecida, elemento por elemento.
concat O(N) O(N) O(N) - - Combina a enumeração de enumerações indicada como uma única enumeração concatenada.
contém - - - - O(log(N)) Retornará true se o conjunto contiver o elemento especificado.
containsKey - - - O(log(N)) - Testa se um elemento está no domínio de um mapa.
contagem - - - - O(N) Retorna o número de elementos no conjunto.
countBy - - O(N) - - Aplica uma função de geração de chave a cada elemento de uma sequência e retorna uma sequência que produz chaves exclusivas e seu número de ocorrências na sequência original.
copy O(N) - O(N) - - Copia a coleção.
create O(N) - - - - Cria uma matriz de elementos inteiros que são inicialmente o valor fornecido.
atraso - - O(1) - - Retorna uma sequência criada com base na especificação atrasada de uma sequência.
diferença - - - - O(M*log(N)) Retorna um novo conjunto com os elementos do segundo conjunto removidos do primeiro conjunto.
distinct O(1)* Retorna uma sequência que não contém entradas duplicadas de acordo com as comparações de hash e igualdade genéricas nas entradas. Se um elemento ocorrer várias vezes na sequência, as ocorrências posteriores serão descartadas.
distinctBy O(1)* Retorna uma sequência que não contém entradas duplicadas de acordo com as comparações de hash e igualdade genéricas nas chaves retornadas pela função de geração de chave fornecida. Se um elemento ocorrer várias vezes na sequência, as ocorrências posteriores serão descartadas.
empty O(1) O(1) O(1) O(1) O(1) Cria uma coleção vazia.
Existe O(N) O(N) O(N) O(log(N)) O(log(N)) Testa se qualquer elemento da sequência satisfaz o predicado fornecido.
exists2 O(min(N,M)) - O(min(N,M)) Testa se qualquer par de elementos correspondentes das sequências de entrada satisfaz o predicado fornecido.
fill O(N) Define um intervalo de elementos do array para o valor fornecido.
filtro O(N) O(N) O(N) O(N) O(N) Retorna uma nova coleção que contém apenas os elementos da coleção para os quais o predicado indicado retorna true.
find O(N) O(N) O(N) O(log(N)) - Retorna o primeiro elemento para o qual a função fornecida retorna true. Retorna System.Collections.Generic.KeyNotFoundException se nenhum elemento desse tipo existir.
findIndex O(N) O(N) O(N) - - Retorna o índice do primeiro elemento na matriz que satisfaz o predicado fornecido. Gera System.Collections.Generic.KeyNotFoundException se nenhum elemento satisfaz o predicado.
findKey - - - O(log(N)) - Avalia a função em cada mapeamento na coleção e retorna a chave para o primeiro mapeamento em que a função retorna true. Se nenhum elemento desse tipo existir, essa função gerará System.Collections.Generic.KeyNotFoundException.
dobrar O(N) O(N) O(N) O(N) O(N) Aplica uma função a cada elemento da coleção, encadeando um argumento de acumulador por meio da computação. Se a função de entrada for f e os elementos forem i0...iN, essa função calcula f (... (f s i0)...) iN.
fold2 O(N) O(N) - - - Aplica uma função aos elementos correspondentes de duas coleções, passando um argumento acumulador através da computação. As coleções devem ter tamanhos idênticos. Se a função de entrada for f e os elementos forem i0... iN e j0... jN, essa função calcula f (... (f s i0 j0)...) iN jN.
foldBack O(N) O(N) - O(N) O(N) Aplica uma função a cada elemento da coleção, encadeando um argumento acumulador ao longo da computação. Se a função de entrada for f e os elementos forem i0... iN, essa função calcula f i0 (... (f iN s)).
foldBack2 O(N) O(N) - - - Aplica uma função aos elementos correspondentes de duas coleções, passando um argumento acumulador através da computação. As coleções devem ter tamanhos idênticos. Se a função de entrada for f e os elementos forem i0... iN e j0... jN, essa função calcula f i0 j0 (... (f iN jN s)).
forall O(N) O(N) O(N) O(N) O(N) Testa se todos os elementos da coleção atendem ao predicado fornecido.
forall2 O(N) O(N) O(N) - - Testa se todos os elementos correspondentes da coleção atendem ao predicado fornecido em pares.
get / nth O(1) O(N) O(N) - - Retorna um elemento da coleção de acordo com o índice associado.
head - O(1) O(1) - - Retorna o primeiro elemento da coleção.
init O(N) O(N) O(1) - - Cria uma coleção dada a dimensão e uma função geradora para calcular os elementos.
initInfinite - - O(1) - - Gera uma sequência que, quando iterada, retorna elementos sucessivos chamando a função fornecida.
interseção - - - - O(log(N)*log(M)) Calcula a interseção de dois conjuntos.
intersectMany - - - - O(N1*N2...) Calcula a interseção de uma sequência de conjuntos. A sequência não deve estar vazia.
estáVazio O(1) O(1) O(1) O(1) - Retorna true se a coleção estiver vazia.
isProperSubset - - - - O(M*log(N)) Retorna true se todos os elementos do primeiro conjunto estiverem no segundo conjunto e pelo menos um elemento do segundo conjunto não estiver no primeiro conjunto.
isProperSuperset - - - - O(M*log(N)) Retorna true se todos os elementos do segundo conjunto estiverem no primeiro conjunto e pelo menos um elemento do primeiro conjunto não estiver no segundo conjunto.
isSubset - - - - O(M*log(N)) Retorna true se todos os elementos do primeiro conjunto estiverem no segundo conjunto.
isSuperset - - - - O(M*log(N)) Retorna true se todos os elementos do segundo conjunto estiverem no primeiro conjunto.
iter O(N) O(N) O(N) O(N) O(N) Aplica a função fornecida a cada elemento da coleção.
iteri O(N) O(N) O(N) - - Aplica a função fornecida a cada elemento da coleção. O inteiro passado para a função indica o índice do elemento.
iteri2 O(N) O(N) - - - Aplica a função fornecida a um par de elementos que são extraídos de índices correspondentes em duas matrizes. O inteiro passado para a função indica o índice dos elementos. As duas matrizes devem ter o mesmo comprimento.
iter2 O(N) O(N) O(N) - - Aplica a função fornecida a um par de elementos que são extraídos de índices correspondentes em duas matrizes. As duas matrizes devem ter o mesmo comprimento.
último O(1) O(N) O(N) - - Retorna o último item na coleção aplicável.
length O(1) O(N) O(N) - - Retorna o número de elementos na coleção.
mapa O(N) O(N) O(1) - - Cria uma coleção cujos elementos são os resultados da aplicação da função fornecida a cada elemento da matriz.
map2 O(N) O(N) O(1) - - Cria uma coleção cujos elementos são os resultados da aplicação da função fornecida aos elementos correspondentes das duas coleções emparelhadamente. As duas matrizes de entrada devem ter o mesmo comprimento.
map3 - O(N) - - - Cria uma coleção cujos elementos são os resultados da aplicação da função fornecida aos elementos correspondentes das três coleções simultaneamente.
mapi O(N) O(N) O(N) - - Cria uma matriz cujos elementos são os resultados da aplicação da função fornecida a cada elemento da matriz. O índice inteiro passado para a função indica o índice do elemento que está sendo transformado.
mapi2 O(N) O(N) - - - Cria uma coleção cujos elementos são os resultados da aplicação da função fornecida aos elementos correspondentes das duas coleções de forma emparelhada, passando também o índice dos elementos. As duas matrizes de entrada devem ter o mesmo comprimento.
max O(N) O(N) O(N) - - Retorna o maior elemento da coleção, comparado usando o operador máximo.
maxBy O(N) O(N) O(N) - - Retorna o maior elemento da coleção, comparado aplicando max ao resultado da função.
maxElement - - - - O(log(N)) Retorna o maior elemento no conjunto de acordo com a ordenação usada para o conjunto.
min O(N) O(N) O(N) - - Retorna o elemento mínimo na coleção, comparado usando o operador min.
minBy O(N) O(N) O(N) - - Retorna o menor elemento da coleção, comparado por meio do operador min no resultado da função.
minElement - - - - O(log(N)) Retorna o elemento mais baixo no conjunto de acordo com a ordenação usada para o conjunto.
ofArray - O(N) O(1) O(N) O(N) Cria uma coleção que contém os mesmos elementos que a matriz fornecida.
ofList O(N) - O(1) O(N) O(N) Cria uma coleção que contém os mesmos elementos da lista fornecida.
ofSeq O(N) O(N) - O(N) O(N) Cria uma coleção que contém os mesmos elementos que a sequência fornecida.
pairwise - - O(N) - - Retorna uma sequência de cada elemento na sequência de entrada e seu antecessor, exceto pelo primeiro elemento, que é retornado apenas como o antecessor do segundo elemento.
partição O(N) O(N) - O(N) O(N) Divide a coleção em duas coleções. A primeira coleção contém os elementos para os quais o predicado fornecido retorna truee a segunda coleção contém os elementos para os quais o predicado fornecido retorna false.
permute O(N) O(N) - - - Retorna uma matriz com todos os elementos permutados de acordo com a permutação especificada.
pick O(N) O(N) O(N) O(log(N)) - Aplica a função fornecida a elementos sucessivos, retornando o primeiro resultado em que a função retorna Some. Se a função nunca retornar Some, System.Collections.Generic.KeyNotFoundException será gerado.
escolhaAleatória O(1) O(1) O(1) - - Retorna um elemento aleatório da coleção fornecida.
randomChoiceBy O(1) O(1) O(1) - - Retorna um elemento aleatório da coleção fornecida com a função randomizer especificada.
randomChoiceWith O(1) O(1) O(1) - - Retorna um elemento aleatório da coleção fornecida com a instância de Random especificada.
randomChoices O(contagem) O(contagem) O(contagem) - - Retorna uma coleção de elementos aleatórios da coleção fornecida, cada elemento pode ser selecionado várias vezes.
randomChoicesBy O(contagem) O(contagem) O(contagem) - - Retorna uma coleção de elementos aleatórios da coleção fornecida com a função randomizer especificada, cada elemento pode ser selecionado várias vezes.
randomChoicesWith O(contagem) O(contagem) O(contagem) - - Retorna uma coleção de elementos aleatórios da coleção fornecida com a instância de Random especificada, cada elemento pode ser selecionado várias vezes.
randomSample O(contagem) O(contagem) O(contagem) - - Retorna um exemplo aleatório de elementos da coleção fornecida, cada elemento pode ser selecionado apenas uma vez.
randomSampleBy O(contagem) O(contagem) O(contagem) - - Retorna uma amostra aleatória de elementos da coleção fornecida com a função randomizer especificada, cada elemento pode ser selecionado apenas uma vez.
randomSampleWith O(contagem) O(contagem) O(contagem) - - Retorna um exemplo aleatório de elementos da coleção fornecida com a instância de Random especificada, cada elemento pode ser selecionado apenas uma vez.
randomShuffle O(N) O(N) O(N) - - Retorna uma nova coleção embaralhada aleatoriamente.
randomShuffleBy O(N) O(N) O(N) - - Retorna uma nova coleção embaralhada em uma ordem aleatória com a função randomizer especificada.
randomShuffleWith O(N) O(N) O(N) - - Retorna uma nova coleção embaralhada em uma ordem aleatória com a instância Random especificada.
randomShuffleInPlace O(N) - - - - Embaralha a matriz de entrada em uma ordem aleatória, modificando-a no local.
randomShuffleInPlaceBy O(N) - - - - Ordena a matriz de entrada de forma aleatória usando a função randomizer especificada, modificando a matriz no próprio local.
randomShuffleInPlaceWith O(N) - - - - Classifica a matriz de entrada em uma ordem aleatória com a instância Random especificada, modificando-a no local.
readonly - - O(N) - - Cria um objeto de sequência que é delegado ao objeto de sequência indicado. Essa operação garante que uma conversão de tipo não possa redescobrir e alterar a sequência original. Por exemplo, se uma matriz for fornecida, a sequência retornada retornará os elementos da matriz, mas você não poderá converter o objeto de sequência retornado em uma matriz.
reduce O(N) O(N) O(N) - - Aplica uma função a cada elemento da coleção, passando um argumento acumulador ao longo da computação. Essa função começa aplicando a função aos dois primeiros elementos, passa esse resultado para a função junto com o terceiro elemento e assim por diante. A função retorna o resultado final.
reduceBack O(N) O(N) - - - Aplica uma função a cada elemento da coleção, passando um argumento acumulador ao longo do processo de computação. Se a função de entrada for f e os elementos forem i0... iN, essa função calcula f i0 (... (f iN-1 iN)).
remove - - - O(log(N)) O(log(N)) Remove um elemento do domínio do mapa. Nenhuma exceção será gerada se o elemento não estiver presente.
replicar - O(N) - - - Cria uma lista de um comprimento especificado com cada elemento definido para o valor indicado.
rev O(N) O(N) - - - Retorna uma nova lista com os elementos em ordem inversa.
escaneamento O(N) O(N) O(N) - - Aplica uma função a cada elemento da coleção, passando um argumento acumulador através da computação. Essa operação aplica a função ao segundo argumento e ao primeiro elemento da lista. Em seguida, a operação passa esse resultado para a função junto com o segundo elemento e assim por diante. Por fim, a operação retorna a lista de resultados intermediários e o resultado final.
scanBack O(N) O(N) - - - Se assemelha à operação foldBack, mas retorna os resultados intermediários e finais.
singleton - - O(1) - O(1) Retorna uma sequência que produz apenas um item.
set O(1) - - - - Define um elemento de uma matriz como o valor especificado.
skip - - O(N) - - Retorna uma sequência que ignora N elementos da sequência subjacente e, em seguida, produz os elementos restantes da sequência.
skipWhile - - O(N) - - Retorna uma sequência que, quando iterada, ignora elementos da sequência subjacente enquanto o predicado fornecido retorna true e, em seguida, produz os elementos restantes da sequência.
sort O(N*log(N)) average

O(N^2) pior caso
O(N*log(N)) O(N*log(N)) - - Classifica a coleção por valor de elemento. Os elementos são comparados usando comparar.
sortBy O(N*log(N)) average

O(N^2) pior caso
O(N*log(N)) O(N*log(N)) - - Classifica a lista fornecida usando as chaves fornecidas pela projeção fornecida. As chaves são comparadas usando comparar.
sortInPlace O(N*log(N)) average

O(N^2) pior caso
- - - - Classifica os elementos de uma matriz modificando-os no local e usando a função de comparação fornecida. Os elementos são comparados usando comparar.
sortInPlaceBy O(N*log(N)) average

O(N^2) pior caso
- - - - Classifica os elementos de uma matriz alterando-os no lugar e usando a projeção indicada para as chaves. Os elementos são comparados usando comparar.
sortInPlaceWith O(N*log(N)) average

O(N^2) pior caso
- - - - Classifica os elementos de uma matriz modificando-os no local e usando a função de comparação fornecida como a ordem.
sortWith O(N*log(N)) average

O(N^2) pior caso
O(N*log(N)) - - - Classifica os elementos de uma coleção, usando a função de comparação fornecida como a ordem e retornando uma nova coleção.
sub O(N) - - - - Cria uma matriz que contém o subintervalo indicado que é especificado por índice inicial e comprimento.
Sum O(N) O(N) O(N) - - Retorna a soma dos elementos na coleção.
sumBy O(N) O(N) O(N) - - Retorna a soma dos resultados gerados aplicando a função a cada elemento da coleção.
tail - O(1) - - - Retorna a lista sem seu primeiro elemento.
take - - O(N) - - Retorna os elementos da sequência até uma contagem especificada.
takeWhile - - O(1) - - Retorna uma sequência que, quando iterada, produz elementos da sequência subjacente enquanto o predicado fornecido retorna true e, em seguida, não retorna mais elementos.
toArray - O(N) O(N) O(N) O(N) Cria uma matriz da coleção indicada.
toList O(N) - O(N) O(N) O(N) Cria uma lista da coleção fornecida.
toSeq O(1) O(1) - O(1) O(1) Cria uma sequência da coleção fornecida.
truncate - - O(1) - - Retorna uma sequência que, quando enumerada, retorna não mais do que N elementos.
tryFind O(N) O(N) O(N) O(log(N)) - Pesquisa um elemento que satisfaça um determinado predicado.
tryFindIndex O(N) O(N) O(N) - - Pesquisa o primeiro elemento que satisfaz um determinado predicado e retorna o índice do elemento correspondente ou None se nenhum elemento desse tipo existir.
tryFindKey - - - O(log(N)) - Retorna a chave do primeiro mapeamento na coleção que satisfaz o predicado fornecido ou retorna None se nenhum elemento desse tipo existir.
tryPick O(N) O(N) O(N) O(log(N)) - Aplica a função fornecida a elementos sucessivos, retornando o primeiro resultado em que a função retorna Some para algum valor. Se nenhum elemento desse tipo existir, a operação retornará None.
unfold - - O(N) - - Retorna uma sequência que contém os elementos gerados pela computação fornecida.
union - - - - O(M*log(N)) Calcula a união dos dois conjuntos.
unionMany - - - - O(N1*N2...) Calcula a união de uma sequência de conjuntos.
unzip O(N) O(N) O(N) - - Divide uma lista de pares em duas listas.
unzip3 O(N) O(N) O(N) - - Divide uma lista de triplos em três.
windowed - - O(N) - - Retorna uma sequência que gera janelas deslizantes de elementos contidos que são extraídos da sequência de entrada. Cada janela é retornada como uma nova matriz.
zip O(N) O(N) O(N) - - Combina as duas coleções em uma lista de pares. As duas listas devem ter comprimentos iguais.
zip3 O(N) O(N) O(N) - - Combina as três coleções em uma lista de triplos. As listas devem ter comprimentos iguais.

Consulte também