Tipos de coleção de F#

Ao revisar este tópico, é possível determinar qual tipo de coleção de F# melhor se adapta a uma necessidade específica. Esses tipos de coleção diferem dos tipos de coleção no .NET, como os do namespace System.Collections.Generic, pois os tipos de coleção de F# são desenvolvidos com base em uma perspectiva de programação funcional em vez de em uma perspectiva orientada a objetos. Mais especificamente, somente a coleção de matriz possui 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 em que 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 List
Matriz Uma coleção mutável de tamanho fixo e com base em zero de elementos de dados consecutivos que são todos do mesmo tipo. matrizes

Módulo Array

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 coleção de dados grande e ordenada, mas não espera necessariamente usar todos os elementos. Elementos de sequência individuais são calculados apenas conforme necessário, portanto, uma sequência poderá 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
Map Um dicionário imutável de elementos. Os elementos são acessados por uma chave. Módulo de mapa
Configurar Um conjunto imutável que é baseado em árvores binárias, em que a comparação é a função de comparação estrutural de F#, que potencialmente usa implementações da interface System.IComparable em valores de chave. Módulo Set

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, caso existente. 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 é retornada imediatamente, embora ainda afete o desempenho da sequência quando enumerada.

Função Array Lista Sequência Mapeamento Definir Descrição
acrescentar O(N) O(N) O(N) - - Retorna uma nova coleção que contém os elementos da primeira coleção seguidos pelos elementos da segunda.
add - - - 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.
Conversão - - O(N) - - Converte os elementos para o tipo especificado.
choose O(N) O(N) O(N) - - Aplica a função f indicada 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 indicada 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 indicada, 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)) Retorna true se o conjunto contiver o elemento especificado.
containsKey - - - O(log(N)) - Testa se um elemento está no domínio de um mapa.
count - - - - O(N) Retorna o número de elementos no conjunto.
countBy - - O(N) - - Aplica uma função geradora de chave a cada elemento de uma sequência e retorna uma sequência que gera chaves exclusivas e o respectivo 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 todos inicialmente o valor indicado.
atrasar - - 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 genéricas de hash e igualdade nas entradas. Se um elemento ocorrer diversas 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 genéricas de hash e igualdade nas chaves retornadas pela função geradora de chave indicada. Se um elemento ocorrer diversas 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.
exists O(N) O(N) O(N) O(log(N)) O(log(N)) Testa se algum elemento da sequência atende ao predicado indicado.
exists2 O(min(N,M)) - O(min(N,M)) Testa se qualquer par de elementos correspondentes das sequências de entrada atende ao predicado indicado.
fill O(N) Define um intervalo de elementos da matriz para o valor indicado.
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.
localizar O(N) O(N) O(N) O(log(N)) - Retorna o primeiro elemento para o qual a função indicada retorna true. Retorna System.Collections.Generic.KeyNotFoundException quando esse elemento não existe.
findIndex O(N) O(N) O(N) - - Retorna o índice do primeiro elemento na matriz que atende ao predicado indicado. Gera System.Collections.Generic.KeyNotFoundException quando nenhum elemento atende ao predicado.
findKey - - - O(log(N)) - Avalia a função em cada mapeamento na coleção e retorna a chave do primeiro mapeamento em que a função retorna true. Quando esse elemento não existe, esta função gera 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 calculará f (... (f s i0)...) iN.
fold2 O(N) O(N) - - - Aplica uma função aos elementos correspondentes de duas coleções, encadeando um argumento de acumulador por meio 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 calculará 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 de acumulador por meio da computação. Se a função de entrada for f e os elementos forem i0...iN, essa função calculará f i0 (...(f iN s)).
foldBack2 O(N) O(N) - - - Aplica uma função aos elementos correspondentes de duas coleções, encadeando um argumento de acumulador por meio 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 calculará 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 indicado.
forall2 O(N) O(N) O(N) - - Testa se todos os elementos correspondentes da coleção atendem ao predicado indicado com relação aos 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 de acordo com 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 indicada.
intersect - - - - 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.
isEmpty O(1) O(1) O(1) O(1) - Retorna true quando a coleção está vazia.
isProperSubset - - - - O(M*log(N)) Retorna true quando todos os elementos do primeiro conjunto estão no segundo e pelo menos um elemento do segundo não está no primeiro.
isProperSuperset - - - - O(M*log(N)) Retorna true quando todos os elementos do segundo conjunto estão no primeiro e pelo menos um elemento do primeiro não está no segundo.
isSubset - - - - O(M*log(N)) Retorna true quando todos os elementos do primeiro conjunto estão no segundo.
isSuperset - - - - O(M*log(N)) Retorna true quando todos os elementos do segundo conjunto estão no primeiro.
iter O(N) O(N) O(N) O(N) O(N) Aplica a função indicada a cada elemento da coleção.
iteri O(N) O(N) O(N) - - Aplica a função indicada a cada elemento da coleção. O inteiro que é transmitido à função indica o índice do elemento.
iteri2 O(N) O(N) - - - Aplica a função indicada a um par de elementos que são extraídos de índices correspondentes em duas matrizes. O inteiro que é transmitido à 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 indicada a um par de elementos que são extraídos de índices correspondentes em duas matrizes. As duas matrizes devem ter o mesmo comprimento.
last O(1) O(N) O(N) - - Retorna o último item da coleção aplicável.
comprimento 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 com elementos que são o resultado da aplicação da função indicada a cada elemento da matriz.
map2 O(N) O(N) O(1) - - Cria uma coleção com elementos que são o resultado da aplicação da função indicada aos elementos correspondentes das duas coleções com relação aos pares. As duas matrizes de entrada devem ter o mesmo comprimento.
map3 - O(N) - - - Cria uma coleção com elementos que são o resultado da aplicação da função indicada aos elementos correspondentes das três coleções simultaneamente.
mapi O(N) O(N) O(N) - - Cria uma matriz com elementos que são o resultado da aplicação da função indicada a cada elemento do matriz. O índice inteiro que é transmitido à função indica o índice do elemento que está sendo transformado.
mapi2 O(N) O(N) - - - Cria uma coleção com elementos que são o resultado da aplicação da função indicada aos elementos correspondentes das duas coleções com relação aos pares, transmitindo 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 por meio do operador max.
maxBy O(N) O(N) O(N) - - Retorna o maior elemento da coleção, comparado por meio de max no resultado da função.
maxElement - - - - O(log(N)) Retorna o maior elemento do conjunto de acordo com a ordenação usada para o conjunto.
min O(N) O(N) O(N) - - Retorna o menor elemento da coleção, comparado por meio do 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 do 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 indicada.
ofList O(N) - O(1) O(N) O(N) Cria uma coleção que contém os mesmos elementos que a lista indicada.
ofSeq O(N) O(N) - O(N) O(N) Cria uma coleção que contém os mesmos elementos que a sequência indicada.
pairwise - - O(N) - - Retorna uma sequência de cada elemento na sequência de entrada e seu predecessor, exceto o primeiro elemento, que é retornado somente como predecessor do segundo.
partition O(N) O(N) - O(N) O(N) Divide a coleção em duas. A primeira contém os elementos para os quais o predicado indicado retorna true e a segunda contém os elementos para os quais ele 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 indicada 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.
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 for indicada uma matriz, a sequência retornada retornará os elementos dessa matriz, mas não será possível 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, encadeando um argumento de acumulador por meio da computação. Essa função começa aplicando a função aos dois primeiros elementos, em seguida, transmite esse resultado para a função 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, 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 calculará f i0 (...(f iN-1 iN)).
remover - - - 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.
verificar 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. Essa operação aplica a função ao segundo argumento e ao primeiro elemento da lista. Em seguida, ela transmite esse resultado para a função 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) - - - Assemelha-se à operação foldBack, mas retorna os resultados intermediário e final.
singleton - - O(1) - O(1) Retorna uma sequência que produz somente um item.
set O(1) - - - - Define um elemento de uma matriz para 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 os elementos da sequência subjacente enquanto o predicado indicado retorna true e, em seguida, produz os elementos restantes da sequência.
sort O(N*log(N)) average

O(N^2) worst case
O(N*log(N)) O(N*log(N)) - - Classifica a coleção por valor do elemento. Os elementos são comparados usando a comparação.
sortBy O(N*log(N)) average

O(N^2) worst case
O(N*log(N)) O(N*log(N)) - - Classifica a lista indicada usando as chaves fornecidas pela projeção. As chaves são comparadas usando a comparação.
sortInPlace O(N*log(N)) average

O(N^2) worst case
- - - - Classifica os elementos de uma matriz alterando-os no lugar e usando a função de comparação indicada. Os elementos são comparados usando a comparação.
sortInPlaceBy O(N*log(N)) average

O(N^2) worst case
- - - - 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 a comparação.
sortInPlaceWith O(N*log(N)) average

O(N^2) worst case
- - - - Classifica os elementos de uma matriz alterando-os no lugar e usando a função de comparação indicada como a ordem.
sortWith O(N*log(N)) average

O(N^2) worst case
O(N*log(N)) - - - Classifica os elementos de uma coleção usando a função de comparação indicada 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 da coleção.
sumBy O(N) O(N) O(N) - - Retorna a soma dos resultados gerados pela aplicação da função a cada elemento da coleção.
tail - O(1) - - - Retorna a lista sem o 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 indicado 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 indicada.
toSeq O(1) O(1) - O(1) O(1) Cria uma sequência da coleção indicada.
truncate - - O(1) - - Retorna uma sequência que, quando enumerada, não retorna mais que N elementos.
tryFind O(N) O(N) O(N) O(log(N)) - Pesquisa um elemento que atenda a um determinado predicado.
tryFindIndex O(N) O(N) O(N) - - Pesquisa o primeiro elemento que atende a um determinado predicado e retorna o índice do elemento correspondente ou None quando o elemento não existe.
tryFindKey - - - O(log(N)) - Retorna a chave do primeiro mapeamento na coleção que atende ao predicado indicado ou retorna None quando o elemento não existe.
tryPick O(N) O(N) O(N) O(log(N)) - Aplica a função indicada a elementos sucessivos, retornando o primeiro resultado em que a função retorna Some para algum valor. Se o elemento não existir, a operação retornará None.
unfold - - O(N) - - Retorna uma sequência que contém os elementos gerados pela computação indicada.
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.
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.

Confira também