Compartir vía


Tipos de colección de F#

Este tema le ayudará a 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 System.Collections.Generic, en que los tipos de colección de F# están diseñados desde una perspectiva de programación funcional, en vez de una perspectiva orientada a objetos. Más concretamente, solo la colección Array 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 el que se almacenan los objetos. Las estructuras de datos (como tablas hash, listas de vínculo 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 Serie ordenada e inmutable de elementos del mismo tipo. Se implementa como una lista de vínculo. Listas

List (Módulo)
Array Colección mutable, de tamaño fijo y base cero de elementos de datos consecutivos que son todos del mismo tipo. Matrices

Array (Módulo)

Array2D (Módulo)

Array3D (Módulo)
seq Serie lógica de elementos que son todos del mismo tipo. Las secuencias son especialmente útiles cuando se tiene una colección grande y ordenada de datos, pero no se espera necesariamente usar todos los elementos. Los elementos de secuencia individuales solo se calculan según sea necesario, por lo que una secuencia puede funcionar mejor que una lista si no se usan todos los elementos. Las secuencias se representan mediante el tipo seq<'T>, que es un alias de IEnumerable<T>. Por lo tanto, cualquier tipo de .NET Framework que implemente System.Collections.Generic.IEnumerable<'T> se puede usar como secuencia. Secuencias

Módulo Seq
Map Diccionario inmutable de elementos. Se accede a los elementos mediante una clave. Módulo Map
Establecimiento Conjunto inmutable basado en árboles binarios, donde la comparación es la función de comparación estructural de F#, con un posible uso de las implementaciones de la interfaz System.IComparable en los valores de clave. Módulo Set

Tabla de funciones

En esta sección se comparan las funciones que están disponibles en los tipos de colección de F#. Se indica 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 guión (-) indica que esta función no está disponible en la colección. Dado que las secuencias se evalúan de forma diferida, una función como Seq.distinct puede ser O(1) porque se devuelve inmediatamente, aunque siga afectando al rendimiento de la secuencia cuando se enumera.

Función Array List Secuencia Asignación Set Descripción
append O(N) O(N) O(N) - - Devuelve una colección nueva 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 colección nueva con el elemento agregado.
average O(N) O(N) O(N) - - Devuelve el promedio de elementos de la colección.
averageBy O(N) O(N) O(N) - - Devuelve el promedio de resultados de la función proporcionada aplicado 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 al tipo especificado.
choose O(N) O(N) O(N) - - Aplica la función f especificada a cada elemento x de la lista. Devuelve la lista que contiene los resultados de cada elemento para el cual la función devuelve Some(f(x)).
collect O(N) O(N) O(N) - - Aplica la función especificada 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 especificada, elemento por elemento.
concat O(N) O(N) O(N) - - Combina la enumeración de enumeraciones especificada como una sola enumeración concatenada.
contiene - - - - 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 una asignación.
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 proporciona claves únicas y su número de apariciones en la secuencia original.
copy O(N) - O(N) - - Copia la colección.
create O(N) - - - - Crea una matriz de elementos completos que son inicialmente el valor especificado.
delay - - O(1) - - Devuelve una secuencia creada a partir de la especificación diferida de una secuencia.
diferencia - - - - O(M*log(N)) Devuelve un conjunto nuevo 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 aparece 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 de generación de claves especificada. Si un elemento aparece 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 algún 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 colección nueva que contiene solo los elementos de la colección para los 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 especificada devuelve true. Devuelve System.Collections.Generic.KeyNotFoundException si no existe ningún elemento.
findIndex O(N) O(N) O(N) - - Devuelve el índice del primer elemento de la matriz que satisface el predicado especificado. Genera System.Collections.Generic.KeyNotFoundException si 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 este elemento, esta función genera System.Collections.Generic.KeyNotFoundException.
fold O(N) O(N) O(N) O(N) O(N) Aplica una función a cada elemento de la colección, para lo que subprocesa un argumento de acumulador durante el cálculo. Si la función de entrada es f y los elementos son i0...iN, esta función calcula f (... (f s i0)...) iN.
fold2 O(N) O(N) - - - Aplica una función a los elementos correspondientes de dos colecciones, para lo que subprocesa un argumento de acumulador durante el 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)...) iN jN.
foldBack O(N) O(N) - O(N) O(N) Aplica una función a cada elemento de la colección, para lo que subprocesa un argumento de acumulador durante el 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, para lo que subprocesa un argumento de acumulador durante el 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 en pares el predicado especificado.
get / nth O(1) O(N) O(N) - - Devuelve un elemento de la colección dado 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 a partir de la dimensión y la función de generador especificadas para calcular los elementos.
initInfinite - - O(1) - - Genera una secuencia que, cuando se itera, devuelve elementos sucesivos mediante una llamada a la función especificada.
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 true si todos los elementos del primer conjunto se encuentran en el segundo conjunto y al menos un elemento del segundo no se encuentra en el primero.
isProperSuperset - - - - O(M*log(N)) Devuelve true si todos los elementos del segundo conjunto se encuentran en el primer conjunto y al menos un elemento del primero no se encuentra en el segundo.
isSubset - - - - O(M*log(N)) Devuelve true si todos los elementos del primer conjunto se encuentran en el segundo.
isSuperset - - - - O(M*log(N)) Devuelve true si todos los elementos del segundo conjunto se encuentran en el primero.
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 especificada a un par de elementos procedentes de los índices correspondientes de 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 especificada a un par de elementos procedentes de los índices correspondientes de 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 correspondiente.
length O(1) O(N) O(N) - - Devuelve el número de elementos de la colección.
mapa 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 los resultados de aplicar la función especificada 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 los resultados de aplicar la función especificada a los elementos correspondientes de las tres colecciones simultáneamente.
mapi O(N) O(N) O(N) - - Compila una matriz cuyos elementos son los resultados de aplicar la función especificada a cada elemento de la matriz. El índice de entero que se pasa a la función indica el índice del elemento que se va a transformar.
mapi2 O(N) O(N) - - - Compila una colección cuyos elementos son los resultados de aplicar la función especificada a los elementos correspondientes de las dos colecciones en pares y también pasa 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, comparado mediante el operador max.
maxBy O(N) O(N) O(N) - - Devuelve el elemento más grande de la colección, comparado mediante 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 más pequeño de la colección, comparado mediante el operador min.
minBy O(N) O(N) O(N) - - Devuelve el elemento más pequeño de la colección, comparado mediante el operador min en el resultado de la función.
minElement - - - - O(log(N)) Devuelve el elemento inferior 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 en el caso del 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 true y la segunda colección contiene los elementos para los que el predicado especificado devuelve false.
permute O(N) O(N) - - - Devuelve una matriz con todos los elementos permutados según la permutación especificada.
pick O(N) O(N) O(N) O(log(N)) - Aplica la función especificada a elementos sucesivos y devuelve el primer resultado donde la función devuelve Some. Si la función nunca devuelve Some, se genera System.Collections.Generic.KeyNotFoundException.
readonly - - O(N) - - Crea un objeto de secuencia que se delega en el objeto de secuencia especificado. Esta operación garantiza que una conversión de tipos no pueda volver a detectar y mutar la secuencia original. Por ejemplo, si se proporciona una matriz, la secuencia devuelta devolverá los elementos de la matriz, pero el objeto de secuencia devuelto no se puede convertir en una matriz.
reduce O(N) O(N) O(N) - - Aplica una función a cada elemento de la colección, para lo que subprocesa un argumento de acumulador durante el cálculo. Esta función empieza aplicando la función a los dos primeros elementos y 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, para lo que subprocesa un argumento de acumulador durante el 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)).
quitar - - - O(log(N)) O(log(N)) Quita un elemento del dominio de la asignación. No se genera ninguna excepción si el elemento no está presente.
replicate - O(N) - - - Crea una lista de una longitud especificada con cada elemento establecido en el valor especificado.
rev O(N) O(N) - - - Devuelve una lista nueva con los elementos en orden inverso.
scan O(N) O(N) O(N) - - Aplica una función a cada elemento de la colección, para lo que subprocesa un argumento de acumulador durante el cálculo. Esta operación aplica la función al segundo argumento y al primer elemento de la lista. Después, 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, después, 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 true y, luego, produce los elementos restantes de la secuencia.
sort Promedio: O(N*log(N))

Peor caso: O(N^2)
O(N*log(N)) O(N*log(N)) - - Ordena la colección por valor de elemento. Los elementos se comparan mediante compare.
sortBy Promedio: O(N*log(N))

Peor caso: O(N^2)
O(N*log(N)) O(N*log(N)) - - Ordena la lista especificada mediante las claves que proporciona la proyección especificada. Las claves se comparan mediante compare.
sortInPlace Promedio: O(N*log(N))

Peor caso: O(N^2)
- - - - Ordena los elementos de una matriz, para lo que la muta en contexto y usa la función de comparación especificada. Los elementos se comparan mediante compare.
sortInPlaceBy Promedio: O(N*log(N))

Peor caso: O(N^2)
- - - - Ordena los elementos de una matriz, para lo que la muta en contexto y usa la proyección especificada para las claves. Los elementos se comparan mediante compare.
sortInPlaceWith Promedio: O(N*log(N))

Peor caso: O(N^2)
- - - - Ordena los elementos de una matriz, para lo que la muta en contexto y usa la función de comparación especificada como orden.
sortWith Promedio: O(N*log(N))

Peor caso: O(N^2)
O(N*log(N)) - - - Ordena los elementos de una colección, para lo que usa la función de comparación especificada como orden y devuelve una colección nueva.
sub O(N) - - - - Compila una matriz que contiene el subintervalo indicado que especifican el índice inicial y la longitud.
Sum O(N) O(N) O(N) - - Devuelve la suma de elementos de la colección.
sumBy O(N) O(N) O(N) - - Devuelve la suma de los resultados que se generan al aplicar 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 el número especificado.
takeWhile - - O(1) - - Devuelve una secuencia que, cuando se itera, produce elementos de la secuencia subyacente mientras el predicado especificado devuelve true y, luego, 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, devuelve como máximo 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 satisfaga un predicado determinado y devuelve el índice del elemento coincidente, o None si no existe dicho elemento.
tryFindKey - - - O(log(N)) - Devuelve la clave de la primera asignación de la colección que satisfaga el predicado determinado, o devuelve None si no existe dicho elemento.
tryPick O(N) O(N) O(N) O(log(N)) - Aplica la función especificada a elementos sucesivos y devuelve el primer resultado donde la función devuelve Some para algún valor. Si no existe dicho elemento, la operación devuelve None.
unfold - - O(N) - - Devuelve una secuencia que contiene los elementos que genera el cálculo especificado.
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.
unzip3 O(N) O(N) O(N) - - Divide una lista de triples en tres listas.
windowed - - O(N) - - Devuelve una secuencia que produce ventanas deslizantes de elementos contenedores 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 longitudes iguales.
zip3 O(N) O(N) O(N) - - Combina las tres colecciones en una lista de triples. Las listas deben tener longitudes iguales.

Consulte también