Tipos de coleção F#
Ao revisar este tópico, você pode determinar qual tipo de coleção F# melhor se adapta a uma necessidade específica. Esses tipos de coleção diferem dos tipos de coleção no .NET, como aqueles no namespace, na medida em que os System.Collections.Generic
tipos de coleção F# são projetados a partir de uma perspetiva de programação funcional em vez de uma perspetiva orientada a objetos. Mais especificamente, apenas 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 F#.
Tipo | Description | Ligações Relacionadas |
---|---|---|
Lista | Uma série ordenada e imutável de elementos do mesmo tipo. Implementado como uma lista vinculada. | Listas Módulo Lista |
Matriz | Uma coleção mutável de tamanho fixo, baseada em zero de elementos de dados consecutivos que são todos do mesmo tipo. | Matrizes Módulo de 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 coleção grande e ordenada de dados, mas não necessariamente espera usar todos os elementos. Os elementos de sequência individuais são calculados apenas conforme necessário, de modo que 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 seq<'T> tipo, que é um alias para IEnumerable<T> . Portanto, qualquer tipo de .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 Mapa |
Definir | Um conjunto imutável baseado em árvores binárias, onde a comparação é a função de comparação estrutural F#, que potencialmente usa implementações da System.IComparable interface em valores-chave. |
Definir módulo |
Tabela de funções
Esta seção compara as funções disponíveis nos tipos de coleção F#. A complexidade computacional da função é dada, onde 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 preguiçosamente, uma função como Seq.distinct
pode ser O(1) porque retorna imediatamente, embora ainda afete o desempenho da sequência quando enumerada.
Function | Matriz | Listagem | Sequence | Mapa | Definição | Description |
---|---|---|---|---|---|---|
append | O(N) | O(N) | O(N) | - | - | Retorna uma nova coleção que contém os elementos da primeira coleção seguida 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. |
médiaPor | O(N) | O(N) | O(N) | - | - | Devolve 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. |
Elenco | - | - | O(N) | - | - | Converte os elementos para o tipo especificado. |
escolha | O(N) | O(N) | O(N) | - | - | Aplica a função f dada a cada elemento x da lista. Retorna a lista que contém os resultados para cada elemento onde a função retorna Some(f(x)) . |
Recolha | O(N) | O(N) | O(N) | - | - | Aplica a função dada a cada elemento da coleção, concatena todos os resultados e retorna a lista combinada. |
comparar com | - | - | O(N) | - | - | Compara duas sequências usando a função de comparação dada, elemento por elemento. |
concat | O(N) | O(N) | O(N) | - | - | Combina a enumeração de enumerações dada como uma única enumeração concatenada. |
contém | - | - | - | - | O(log(N)) | Retorna true se o conjunto contiver o elemento especificado. |
contémKey | - | - | - | 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. |
contagemPor | - | - | O(N) | - | - | Aplica uma função de geração de teclas 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. |
Cópia | O(N) | - | O(N) | - | - | Copia a coleção. |
criar | O(N) | - | - | - | - | Cria uma matriz de elementos inteiros que são todos inicialmente o valor dado. |
atrasar | - | - | O(1) | - | - | Retorna uma sequência criada a partir da 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. |
distinto | O(1)* | Retorna uma sequência que não contém entradas duplicadas de acordo com comparações genéricas de hash e igualdade nas entradas. Se um elemento ocorrer várias vezes na sequência, as ocorrências posteriores serão descartadas. | ||||
distintoPor | 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 teclas que a função de geração de chave determinada retorna. 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 algum elemento da sequência satisfaz o predicado dado. |
existe2 | O(min(N,M)) | - | O(min(N,M)) | Testa se qualquer par de elementos correspondentes das sequências de entrada satisfaz o predicado dado. | ||
preencher | O(N) | Define um intervalo de elementos da matriz para o valor determinado. | ||||
filtrar | 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 fornecido retorna true . |
find | O(N) | O(N) | O(N) | O(log(N)) | - | Retorna o primeiro elemento para o qual a função dada retorna true . Retorna System.Collections.Generic.KeyNotFoundException se esse elemento não existir. |
findIndex | O(N) | O(N) | O(N) | - | - | Retorna o índice do primeiro elemento na matriz que satisfaz o predicado fornecido. Levanta System.Collections.Generic.KeyNotFoundException se nenhum elemento satisfizer o predicado. |
findKey | - | - | - | O(log(N)) | - | Avalia a função em cada mapeamento na coleção e retorna a chave para o primeiro mapeamento onde a função retorna true . Se tal elemento não existir, esta função levanta 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 através da computação. Se a função de entrada é f e os elementos são i0... iN, esta função calcula f (... (f s i0)...) iN. |
dobra2 | O(N) | O(N) | - | - | - | Aplica uma função aos elementos correspondentes de duas coleções, encadeando um argumento de acumulador através da computação. As coleções devem ter tamanhos idênticos. Se a função de entrada é f e os elementos são i0... iN e j0... jN, esta função calcula f (... (f s i0 j0)...) iN jN. |
dobrar | O(N) | O(N) | - | O(N) | O(N) | Aplica uma função a cada elemento da coleção, encadeando um argumento de acumulador através da computação. Se a função de entrada é f e os elementos são i0... iN, esta função calcula 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 através da computação. As coleções devem ter tamanhos idênticos. Se a função de entrada é f e os elementos são i0... iN e j0... jN, esta função calcula f i0 j0 (... (f iN jN s)). |
para todos | O(N) | O(N) | O(N) | O(N) | O(N) | Testa se todos os elementos da coleção satisfazem o predicado dado. |
para todos2 | O(N) | O(N) | O(N) | - | - | Testa se todos os elementos correspondentes da coleção satisfazem o predicado dado em pares. |
obter / nth | O(1) | O(N) | O(N) | - | - | Retorna um elemento da coleção dado seu índice. |
cabeça | - | 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 dada. |
interseção | - | - | - | - | O(log(N)*log(M)) | Calcula a intersecção de dois conjuntos. |
cruzam-se. | - | - | - | - | O(N1*N2...) | Calcula a intersecçã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 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. |
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. |
isSubconjunto | - | - | - | - | 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 dada a cada elemento da coleção. |
iteri | O(N) | O(N) | O(N) | - | - | Aplica a função dada a cada elemento da coleção. O inteiro que é passado para a função indica o índice do elemento. |
Iteri2 | O(N) | O(N) | - | - | - | Aplica a função dada a um par de elementos que são extraídos de índices correspondentes em duas matrizes. O inteiro que é 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 dada 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 da coleção aplicável. |
length | O(1) | O(N) | O(N) | - | - | Retorna o número de elementos na coleção. |
map | O(N) | O(N) | O(1) | - | - | Cria uma coleção cujos elementos são os resultados da aplicação da função dada a cada elemento da matriz. |
mapa2 | O(N) | O(N) | O(1) | - | - | Constrói uma coleção cujos elementos são os resultados da aplicação da função dada aos elementos correspondentes das duas coleções em pares. As duas matrizes de entrada devem ter o mesmo comprimento. |
mapa3 | - | O(N) | - | - | - | Constrói uma coleção cujos elementos são os resultados da aplicação da função dada aos elementos correspondentes das três coleções simultaneamente. |
MAPI | O(N) | O(N) | O(N) | - | - | Constrói uma matriz cujos elementos são os resultados da aplicação da função dada a cada elemento da matriz. O índice inteiro que é passado para a função indica o índice do elemento que está sendo transformado. |
MAPI2 | O(N) | O(N) | - | - | - | Constrói uma coleção cujos elementos são os resultados da aplicação da função dada aos elementos correspondentes das duas coleções em pares, 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 max . |
máx. | O(N) | O(N) | O(N) | - | - | Retorna o maior elemento da coleção, comparado usando max no resultado da função. |
maxElemento | - | - | - | - | O(log(N)) | Retorna o maior elemento do conjunto de acordo com a ordem usada para o conjunto. |
min | O(N) | O(N) | O(N) | - | - | Retorna o menor elemento na coleção, comparado usando o operador min . |
minBy | O(N) | O(N) | O(N) | - | - | Retorna o menor elemento na coleção, comparado usando o operador min no resultado da função. |
minElement | - | - | - | - | O(log(N)) | Retorna o elemento mais baixo do conjunto de acordo com a ordem 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. |
deLista | O(N) | - | O(1) | O(N) | O(N) | Cria uma coleção que contém os mesmos elementos que a lista fornecida. |
deSeq | O(N) | O(N) | - | O(N) | O(N) | Cria uma coleção que contém os mesmos elementos que a sequência fornecida. |
emparelhado | - | - | O(N) | - | - | Retorna uma sequência de cada elemento na sequência de entrada e seu predecessor, exceto para o primeiro elemento, que é retornado apenas como o predecessor 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 dado retorna true , e a segunda coleção contém os elementos para os quais o predicado dado retorna false . |
permutar | O(N) | O(N) | - | - | - | Retorna uma matriz com todos os elementos permutados de acordo com a permutação especificada. |
escolher | O(N) | O(N) | O(N) | O(log(N)) | - | Aplica a função dada a elementos sucessivos, retornando o primeiro resultado onde a função retorna Some. Se a função nunca retorna Some, System.Collections.Generic.KeyNotFoundException é gerada. |
só de leitura | - | - | O(N) | - | - | Cria um objeto de sequência que delega ao objeto de sequência determinado. Esta operação garante que um elenco de tipo não possa redescobrir e mutar a sequência original. Por exemplo, se for dada uma matriz, a sequência retornada retornará os elementos da matriz, mas você não poderá converter o objeto de sequência retornado para uma matriz. |
reduzir | O(N) | O(N) | O(N) | - | - | Aplica uma função a cada elemento da coleção, encadeando um argumento de acumulador através da computação. Esta 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. |
reduzir. | O(N) | O(N) | - | - | - | Aplica uma função a cada elemento da coleção, encadeando um argumento de acumulador através da computação. Se a função de entrada é f e os elementos são i0... iN, esta 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 determinado. |
rev | O(N) | O(N) | - | - | - | Retorna uma nova lista com os elementos em ordem inversa. |
varredura | O(N) | O(N) | O(N) | - | - | Aplica uma função a cada elemento da coleção, encadeando um argumento de acumulador através da computação. Esta operação aplica a função ao segundo argumento e ao primeiro elemento da lista. A operação então passa esse resultado para a função junto com o segundo elemento e assim por diante. Finalmente, a operação retorna a lista de resultados intermediários e o resultado final. |
scanVoltar | O(N) | O(N) | - | - | - | Assemelha-se à 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 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. |
pular enquanto | - | - | O(N) | - | - | Retorna uma sequência que, quando iterada, ignora elementos da sequência subjacente enquanto o predicado dado retorna true e, em seguida, produz os elementos restantes da sequência. |
sort | O(N*log(N)) média O(N^2) pior caso |
O(N*log(N)) | O(N*log(N)) | - | - | Classifica a coleção por valor do elemento. Os elementos são comparados usando comparar. |
ordenarPor | O(N*log(N)) média 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)) média O(N^2) pior caso |
- | - | - | - | Classifica os elementos de uma matriz mutando-a no local e usando a função de comparação dada. Os elementos são comparados usando comparar. |
sortInPlaceBy | O(N*log(N)) média O(N^2) pior caso |
- | - | - | - | Classifica os elementos de uma matriz mutando-a no local e usando a projeção dada para as chaves. Os elementos são comparados usando comparar. |
sortInPlaceWith | O(N*log(N)) média O(N^2) pior caso |
- | - | - | - | Classifica os elementos de uma matriz mutando-a no local e usando a função de comparação dada como a ordem. |
classificarCom | O(N*log(N)) média O(N^2) pior caso |
O(N*log(N)) | - | - | - | Classifica os elementos de uma coleção, usando a função de comparação dada como a ordem e retornando uma nova coleção. |
sub | O(N) | - | - | - | - | Cria uma matriz que contém o subintervalo especificado pelo í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 pela aplicação da função a cada elemento da coleção. |
cauda | - | 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 dado retorna true e, em seguida, não retorna mais elementos. |
toArray | - | O(N) | O(N) | O(N) | O(N) | Cria uma matriz a partir de uma determinada coleção. |
toList | O(N) | - | O(N) | O(N) | O(N) | Cria uma lista a partir da coleção fornecida. |
toSeq | O(1) | O(1) | - | O(1) | O(1) | Cria uma sequência a partir da coleção fornecida. |
truncate | - | - | O(1) | - | - | Retorna uma sequência que, quando enumerada, não retorna mais do que N elementos. |
tryEncontrar | O(N) | O(N) | O(N) | O(log(N)) | - | Procura um elemento que satisfaça um determinado predicado. |
tryFindIndex | O(N) | O(N) | O(N) | - | - | Procura o primeiro elemento que satisfaz um determinado predicado e retorna o índice do elemento correspondente, ou None se esse elemento não 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 existir desse tipo. |
tryPick | O(N) | O(N) | O(N) | O(log(N)) | - | Aplica a função dada a elementos sucessivos, retornando o primeiro resultado onde a função retorna Some para algum valor. Se esse elemento não existir, a operação retornará None . |
desdobrar | - | - | O(N) | - | - | Retorna uma sequência que contém os elementos que o cálculo dado gera. |
união | - | - | - | - | O(M*log(N)) | Calcula a união dos dois conjuntos. |
uniãoMuitos | - | - | - | - | O(N1*N2...) | Calcula a união de uma sequência de conjuntos. |
descompactar | O(N) | O(N) | O(N) | - | - | Divide uma lista de pares em duas listas. |
descompactar3 | O(N) | O(N) | O(N) | - | - | Divide uma lista de triplos em três listas. |
com janelas | - | - | O(N) | - | - | Retorna uma sequência que produz janelas deslizantes de elementos contendo 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 numa lista de triplos. As listas devem ter comprimentos iguais. |