Tipos de colección de F#
Al revisar este tema, puede determinar qué tipo de colección de F# se adapta mejor a una necesidad determinada. Estos tipos de colección difieren de los tipos de colección de .NET, como los del espacio de nombres , en que los tipos de colección de F# están diseñados desde una perspectiva de programación funcional en lugar de desde una perspectiva orientada System.Collections.Generic a objetos. Más concretamente, solo la colección de matriz tiene elementos mutables. Por lo tanto, al modificar una colección, se crea una instancia de la colección modificada en lugar de modificar la colección original.
Los tipos de colección también difieren en el tipo de estructura de datos en la que se almacenan los objetos. Las estructuras de datos, como tablas hash, listas vinculadas y matrices, tienen características de rendimiento diferentes y un conjunto diferente de operaciones disponibles.
Tabla de tipos de colección
En la tabla siguiente se muestran los tipos de colección de F#.
| Tipo | Descripción | Vínculos relacionados |
|---|---|---|
| Lista | Una serie ordenada e inmutable de elementos del mismo tipo. Se implementa como una lista vinculada. | Listas List (Módulo) |
| Matriz | Colección mutable de tamaño fijo, de base cero de elementos de datos consecutivos que son del mismo tipo. | Matrices Array (Módulo) Array2D (Módulo) Array3D (Módulo) |
| Seq | Serie lógica de elementos que son todos de un tipo. Las secuencias son especialmente útiles cuando tiene una colección grande y ordenada de datos, pero no necesariamente espera usar todos los elementos. Los elementos de secuencia individuales solo se calculan según sea necesario, por lo que una secuencia puede tener un mejor rendimiento que una lista si no se usan todos los elementos. Las secuencias se representan mediante seq<'T> el tipo , que es un alias para IEnumerable<T> . Por lo tanto, cualquier .NET Framework que implemente System.Collections.Generic.IEnumerable<'T> se puede usar como una secuencia. |
Secuencias Módulo Seq |
| Map | Diccionario inmutable de elementos. Se accede a los elementos por clave. | Módulo de asignación |
| Establecimiento | Un conjunto inmutable que se basa en árboles binarios, donde la comparación es la función de comparación estructural de F#, que potencialmente usa implementaciones de la interfaz en los valores System.IComparable de clave. |
Establecer módulo |
Tabla de funciones
En esta sección se comparan las funciones que están disponibles en los tipos de colección de F#. Se da la complejidad computacional de la función, donde N es el tamaño de la primera colección y M es el tamaño de la segunda colección, si existe. Un guion (-) indica que esta función no está disponible en la colección. Dado que las secuencias se evalúan de forma descomprimida, una función como puede ser O(1) porque devuelve inmediatamente, aunque sigue afectando al rendimiento de la secuencia cuando se Seq.distinct enumera.
| Función | Array | List | Secuencia | Asignación | Set | Descripción |
|---|---|---|---|---|---|---|
| append | O(N) | O(N) | O(N) | - | - | Devuelve una nueva colección que contiene los elementos de la primera colección seguidos de los elementos de la segunda colección. |
| add | - | - | - | O(log(N)) | O(log(N)) | Devuelve una nueva colección con el elemento agregado. |
| average | O(N) | O(N) | O(N) | - | - | Devuelve el promedio de los elementos de la colección. |
| averageBy | O(N) | O(N) | O(N) | - | - | Devuelve el promedio de los resultados de la función proporcionada aplicada a cada elemento. |
| Blit | O(N) | - | - | - | - | Copia una sección de una matriz. |
| caché | - | - | O(N) | - | - | Calcula y almacena elementos de una secuencia. |
| Conversión | - | - | O(N) | - | - | Convierte los elementos en el tipo especificado. |
| choose | O(N) | O(N) | O(N) | - | - | Aplica la función dada f a cada elemento de la x lista. Devuelve la lista que contiene los resultados de cada elemento donde la función devuelve Some(f(x)) . |
| collect | O(N) | O(N) | O(N) | - | - | Aplica la función dada a cada elemento de la colección, concatena todos los resultados y devuelve la lista combinada. |
| compareWith | - | - | O(N) | - | - | Compara dos secuencias mediante la función de comparación determinada, elemento por elemento. |
| concat | O(N) | O(N) | O(N) | - | - | Combina la enumeración de enumeraciones dada como una sola enumeración concatenada. |
| contains | - | - | - | - | O(log(N)) | Devuelve true si el conjunto contiene el elemento especificado. |
| containsKey | - | - | - | O(log(N)) | - | Comprueba si un elemento está en el dominio de un mapa. |
| count | - | - | - | - | O(N) | Devuelve el número de elementos del conjunto. |
| countBy | - | - | O(N) | - | - | Aplica una función de generación de claves a cada elemento de una secuencia y devuelve una secuencia que produce claves únicas y su número de repeticiones en la secuencia original. |
| copy | O(N) | - | O(N) | - | - | Copia la colección. |
| create | O(N) | - | - | - | - | Crea una matriz de elementos enteros que son inicialmente el valor especificado. |
| delay | - | - | O(1) | - | - | Devuelve una secuencia que se ha creado a partir de la especificación diferido dada de una secuencia. |
| diferencia | - | - | - | - | O(M * log(N)) | Devuelve un nuevo conjunto con los elementos del segundo conjunto quitados del primer conjunto. |
| distinct | O(1)* | Devuelve una secuencia que no contiene entradas duplicadas según las comparaciones genéricas de hash e igualdad en las entradas. Si un elemento se produce varias veces en la secuencia, se descartan las repeticiones posteriores. | ||||
| distinctBy | O(1)* | Devuelve una secuencia que no contiene entradas duplicadas según las comparaciones genéricas de hash e igualdad en las claves que devuelve la función generadora de claves determinada. Si un elemento se produce varias veces en la secuencia, se descartan las repeticiones posteriores. | ||||
| empty | O(1) | O(1) | O(1) | O(1) | O(1) | Crea una colección vacía. |
| exists | O(N) | O(N) | O(N) | O(log(N)) | O(log(N)) | Comprueba si algún elemento de la secuencia satisface el predicado especificado. |
| exists2 | O(min(N,M)) | - | O(min(N,M)) | Comprueba si cualquier par de elementos correspondientes de las secuencias de entrada satisface el predicado especificado. | ||
| fill | O(N) | Establece un intervalo de elementos de la matriz en el valor especificado. | ||||
| filter | O(N) | O(N) | O(N) | O(N) | O(N) | Devuelve una nueva colección que contiene solo los elementos de la colección para la que el predicado especificado devuelve true . |
| find | O(N) | O(N) | O(N) | O(log(N)) | - | Devuelve el primer elemento para el que la función determinada devuelve true . Devuelve System.Collections.Generic.KeyNotFoundException si no existe ningún elemento de este tipo. |
| findIndex | O(N) | O(N) | O(N) | - | - | Devuelve el índice del primer elemento de la matriz que satisface el predicado especificado. Genera si System.Collections.Generic.KeyNotFoundException ningún elemento satisface el predicado. |
| findKey | - | - | - | O(log(N)) | - | Evalúa la función en cada asignación de la colección y devuelve la clave de la primera asignación donde la función devuelve true . Si no existe ningún elemento de este tipo, esta función genera System.Collections.Generic.KeyNotFoundException . |
| Doblar | O(N) | O(N) | O(N) | O(N) | O(N) | Aplica una función a cada elemento de la colección y subprocesamiento de un argumento de acumulador a través del cálculo. Si la función de entrada es f y los elementos son i0... iN, esta función calcula f (... (f s i0)...) En. |
| fold2 | O(N) | O(N) | - | - | - | Aplica una función a los elementos correspondientes de dos colecciones, mediante el subproceso de un argumento de acumulador a través del cálculo. Las colecciones deben tener tamaños idénticos. Si la función de entrada es f y los elementos son i0... iN y j0... jN, esta función calcula f (... (f s i0 j0)...) jN de iN. |
| Foldback | O(N) | O(N) | - | O(N) | O(N) | Aplica una función a cada elemento de la colección y subprocesamiento de un argumento de acumulador a través del cálculo. Si la función de entrada es f y los elementos son i0... iN, esta función calcula f i0 (... (f iN s)). |
| foldBack2 | O(N) | O(N) | - | - | - | Aplica una función a los elementos correspondientes de dos colecciones, mediante el subproceso de un argumento de acumulador a través del cálculo. Las colecciones deben tener tamaños idénticos. Si la función de entrada es f y los elementos son i0... iN y j0... jN, esta función calcula f i0 j0 (... (f iN jN s)). |
| Forall | O(N) | O(N) | O(N) | O(N) | O(N) | Comprueba si todos los elementos de la colección satisfacen el predicado especificado. |
| forall2 | O(N) | O(N) | O(N) | - | - | Comprueba si todos los elementos correspondientes de la colección satisfacen el predicado especificado en pares. |
| get/nth | O(1) | O(N) | O(N) | - | - | Devuelve un elemento de la colección según su índice. |
| head | - | O(1) | O(1) | - | - | Devuelve el primer elemento de la colección. |
| init | O(N) | O(N) | O(1) | - | - | Crea una colección dada la dimensión y una función de generador para calcular los elementos. |
| initInfinite | - | - | O(1) | - | - | Genera una secuencia que, cuando se itera, devuelve elementos sucesivos llamando a la función dada. |
| intersect | - | - | - | - | O(log(N) * log(M)) | Calcula la intersección de dos conjuntos. |
| intersectMany | - | - | - | - | O(N1 * N2...) | Calcula la intersección de una secuencia de conjuntos. La secuencia no debe estar vacía. |
| isEmpty | O(1) | O(1) | O(1) | O(1) | - | Devuelve true si la colección está vacía. |
| isProperSubset | - | - | - | - | O(M * log(N)) | Devuelve si todos los elementos del primer conjunto están en el segundo conjunto y al menos un elemento del segundo true conjunto no está en el primer conjunto. |
| isProperSuperset | - | - | - | - | O(M * log(N)) | Devuelve si todos los elementos del segundo conjunto están en el primer conjunto y al menos un elemento del primer true conjunto no está en el segundo conjunto. |
| isSubset | - | - | - | - | O(M * log(N)) | Devuelve true si todos los elementos del primer conjunto están en el segundo conjunto. |
| isSuperset | - | - | - | - | O(M * log(N)) | Devuelve true si todos los elementos del segundo conjunto están en el primer conjunto. |
| Iter | O(N) | O(N) | O(N) | O(N) | O(N) | Aplica la función especificada a cada elemento de la colección. |
| iteri | O(N) | O(N) | O(N) | - | - | Aplica la función especificada a cada elemento de la colección. El entero que se pasa a la función indica el índice del elemento. |
| iteri2 | O(N) | O(N) | - | - | - | Aplica la función dada a un par de elementos que se dibujan a partir de índices de coincidencia en dos matrices. El entero que se pasa a la función indica el índice de los elementos. Las dos matrices deben tener la misma longitud. |
| iter2 | O(N) | O(N) | O(N) | - | - | Aplica la función dada a un par de elementos que se dibujan a partir de índices de coincidencia en dos matrices. Las dos matrices deben tener la misma longitud. |
| last | O(1) | O(N) | O(N) | - | - | Devuelve el último elemento de la colección aplicable. |
| length | O(1) | O(N) | O(N) | - | - | Devuelve el número de elementos de la colección. |
| map | O(N) | O(N) | O(1) | - | - | Compila una colección cuyos elementos son los resultados de aplicar la función especificada a cada elemento de la matriz. |
| map2 | O(N) | O(N) | O(1) | - | - | Compila una colección cuyos elementos son el resultado de aplicar la función dada a los elementos correspondientes de las dos colecciones en pares. Las dos matrices de entrada deben tener la misma longitud. |
| map3 | - | O(N) | - | - | - | Compila una colección cuyos elementos son el resultado de aplicar la función dada a los elementos correspondientes de las tres colecciones simultáneamente. |
| Mapi | O(N) | O(N) | O(N) | - | - | Compila una matriz cuyos elementos son el resultado de aplicar la función dada a cada elemento de la matriz. El índice entero que se pasa a la función indica el índice del elemento que se está transformando. |
| mapi2 | O(N) | O(N) | - | - | - | Compila una colección cuyos elementos son el resultado de aplicar la función dada a los elementos correspondientes de las dos colecciones en pares, pasando también el índice de los elementos. Las dos matrices de entrada deben tener la misma longitud. |
| max | O(N) | O(N) | O(N) | - | - | Devuelve el elemento más grande de la colección, en comparación con el operador max. |
| maxBy | O(N) | O(N) | O(N) | - | - | Devuelve el elemento más grande de la colección, en comparación con el uso de max en el resultado de la función. |
| maxElement | - | - | - | - | O(log(N)) | Devuelve el elemento más grande del conjunto según la ordenación que se usa para el conjunto. |
| Min | O(N) | O(N) | O(N) | - | - | Devuelve el elemento least de la colección, en comparación con el operador min. |
| minBy | O(N) | O(N) | O(N) | - | - | Devuelve el elemento menos de la colección, en comparación con el operador min en el resultado de la función. |
| minElement | - | - | - | - | O(log(N)) | Devuelve el elemento más bajo del conjunto según la ordenación que se usa para el conjunto. |
| ofArray | - | O(N) | O(1) | O(N) | O(N) | Crea una colección que contiene los mismos elementos que la matriz especificada. |
| ofList | O(N) | - | O(1) | O(N) | O(N) | Crea una colección que contiene los mismos elementos que la lista especificada. |
| ofSeq | O(N) | O(N) | - | O(N) | O(N) | Crea una colección que contiene los mismos elementos que la secuencia especificada. |
| Pairwise | - | - | O(N) | - | - | Devuelve una secuencia de cada elemento de la secuencia de entrada y su predecesor, excepto para el primer elemento, que solo se devuelve como predecesor del segundo elemento. |
| partición | O(N) | O(N) | - | O(N) | O(N) | Divide la colección en dos colecciones. La primera colección contiene los elementos para los que el predicado especificado devuelve y la segunda colección contiene los elementos para los que true el predicado especificado devuelve false . |
| permute | O(N) | O(N) | - | - | - | Devuelve una matriz con todos los elementos permutados según la permutación especificada. |
| Elegir | O(N) | O(N) | O(N) | O(log(N)) | - | Aplica la función dada a elementos sucesivos y devuelve el primer resultado donde la función devuelve Some. Si la función nunca devuelve Some, System.Collections.Generic.KeyNotFoundException se genera . |
| readonly | - | - | O(N) | - | - | Crea un objeto de secuencia que delega en el objeto de secuencia especificado. Esta operación garantiza que una conversión de tipo no pueda volver a detectar y mutar la secuencia original. Por ejemplo, si se le da una matriz, la secuencia devuelta devolverá los elementos de la matriz, pero no se puede convertir el objeto de secuencia devuelto a una matriz. |
| reduce | O(N) | O(N) | O(N) | - | - | Aplica una función a cada elemento de la colección, que subprocesamiento un argumento de acumulador a través del cálculo. Esta función comienza aplicando la función a los dos primeros elementos, pasa este resultado a la función junto con el tercer elemento, y así sucesivamente. La función devuelve el resultado final. |
| reduceBack | O(N) | O(N) | - | - | - | Aplica una función a cada elemento de la colección, que subprocesamiento un argumento de acumulador a través del cálculo. Si la función de entrada es f y los elementos son i0... iN, esta función calcula f i0 (... (f iN-1 iN)). |
| remove | - | - | - | O(log(N)) | O(log(N)) | Quita un elemento del dominio del mapa. No se produce ninguna excepción si el elemento no está presente. |
| Replicar | - | O(N) | - | - | - | Crea una lista de una longitud especificada con cada elemento establecido en el valor especificado. |
| Rev | O(N) | O(N) | - | - | - | Devuelve una nueva lista con los elementos en orden inverso. |
| escanear | O(N) | O(N) | O(N) | - | - | Aplica una función a cada elemento de la colección, que subprocesamiento un argumento de acumulador a través del cálculo. Esta operación aplica la función al segundo argumento y al primer elemento de la lista. A continuación, la operación pasa este resultado a la función junto con el segundo elemento y así sucesivamente. Por último, la operación devuelve la lista de resultados intermedios y el resultado final. |
| scanBack | O(N) | O(N) | - | - | - | Se parece a la operación foldBack, pero devuelve los resultados intermedios y finales. |
| singleton | - | - | O(1) | - | O(1) | Devuelve una secuencia que produce solo un elemento. |
| set | O(1) | - | - | - | - | Establece un elemento de una matriz en el valor especificado. |
| skip | - | - | O(N) | - | - | Devuelve una secuencia que omite N elementos de la secuencia subyacente y, a continuación, produce los elementos restantes de la secuencia. |
| skipWhile | - | - | O(N) | - | - | Devuelve una secuencia que, cuando se itera, omite los elementos de la secuencia subyacente mientras el predicado especificado devuelve y, a continuación, produce los elementos true restantes de la secuencia. |
| sort | Promedio de O(N * log(N)) O(N^2) peor caso |
O(N * log(N)) | O(N * log(N)) | - | - | Ordena la colección por valor de elemento. Los elementos se comparan mediante compare. |
| sortBy | Promedio de O(N * log(N)) O(N^2) peor caso |
O(N * log(N)) | O(N * log(N)) | - | - | Ordena la lista dada mediante claves que proporciona la proyección dada. Las claves se comparan mediante compare. |
| sortInPlace | Promedio de O(N * log(N)) O(N^2) peor caso |
- | - | - | - | Ordena los elementos de una matriz mutando en su lugar y usando la función de comparación especificada. Los elementos se comparan mediante compare. |
| sortInPlaceBy | Promedio de O(N * log(N)) O(N^2) peor caso |
- | - | - | - | Ordena los elementos de una matriz mutando en su lugar y usando la proyección especificada para las claves. Los elementos se comparan mediante compare. |
| sortInPlaceWith | Promedio de O(N * log(N)) O(N^2) peor caso |
- | - | - | - | Ordena los elementos de una matriz mutando en su lugar y usando la función de comparación especificada como orden. |
| sortWith | Promedio de O(N * log(N)) O(N^2) peor caso |
O(N * log(N)) | - | - | - | Ordena los elementos de una colección, utilizando la función de comparación especificada como orden y devolviendo una nueva colección. |
| sub | O(N) | - | - | - | - | Compila una matriz que contiene el subrango especificado por el índice inicial y la longitud. |
| Sum | O(N) | O(N) | O(N) | - | - | Devuelve la suma de los elementos de la colección. |
| sumBy | O(N) | O(N) | O(N) | - | - | Devuelve la suma de los resultados que se generan aplicando la función a cada elemento de la colección. |
| tail | - | O(1) | - | - | - | Devuelve la lista sin su primer elemento. |
| take | - | - | O(N) | - | - | Devuelve los elementos de la secuencia hasta un recuento especificado. |
| takeWhile | - | - | O(1) | - | - | Devuelve una secuencia que, cuando se itera, produce elementos de la secuencia subyacente mientras el predicado especificado devuelve y, a continuación, true no devuelve más elementos. |
| toArray | - | O(N) | O(N) | O(N) | O(N) | Crea una matriz a partir de la colección especificada. |
| toList | O(N) | - | O(N) | O(N) | O(N) | Crea una lista a partir de la colección especificada. |
| toSeq | O(1) | O(1) | - | O(1) | O(1) | Crea una secuencia a partir de la colección especificada. |
| truncate | - | - | O(1) | - | - | Devuelve una secuencia que, cuando se enumera, no devuelve más de N elementos. |
| tryFind | O(N) | O(N) | O(N) | O(log(N)) | - | Busca un elemento que satisfaga un predicado determinado. |
| tryFindIndex | O(N) | O(N) | O(N) | - | - | Busca el primer elemento que satisface un predicado determinado y devuelve el índice del elemento correspondiente, o si None no existe dicho elemento. |
| tryFindKey | - | - | - | O(log(N)) | - | Devuelve la clave de la primera asignación de la colección que satisface el predicado especificado o devuelve None si no existe dicho elemento. |
| tryPick | O(N) | O(N) | O(N) | O(log(N)) | - | Aplica la función dada a elementos sucesivos, devolviendo el primer resultado donde la función devuelve Some algún valor. Si no existe ningún elemento de este tipo, la operación devuelve None . |
| Revelan | - | - | O(N) | - | - | Devuelve una secuencia que contiene los elementos que genera el cálculo dado. |
| union | - | - | - | - | O(M * log(N)) | Calcula la unión de los dos conjuntos. |
| unionMany | - | - | - | - | O(N1 * N2...) | Calcula la unión de una secuencia de conjuntos. |
| unzip | O(N) | O(N) | O(N) | - | - | Divide una lista de pares en dos listas. |
| descomprimir3 | O(N) | O(N) | O(N) | - | - | Divide una lista de triples en tres listas. |
| Ventana | - | - | O(N) | - | - | Devuelve una secuencia que produce ventanas deslizantes de elementos que contienen que se extraen de la secuencia de entrada. Cada ventana se devuelve como una matriz nueva. |
| zip | O(N) | O(N) | O(N) | - | - | Combina las dos colecciones en una lista de pares. Las dos listas deben tener las mismas longitudes. |
| zip3 | O(N) | O(N) | O(N) | - | - | Combina las tres colecciones en una lista de triples. Las listas deben tener las mismas longitudes. |