Si tengo dos listas de tipo cadena (o cualquier otro tipo), ¿cuál es una forma rápida de unir las dos listas?
El orden debe permanecer igual. Deben eliminarse los duplicados (aunque cada elemento en ambos enlaces es único). No encontré mucho en esto cuando busqué en Google y no quería implementar ninguna interfaz .NET para la velocidad de entrega.
Respuestas:
Tu podrías intentar:
Página de MSDN para
AddRange
Esto conserva el orden de las listas, pero no elimina los duplicados que
Union
harían.Esto cambia la lista
a
. Si desea conservar las listas originales, debe usarConcat
(como se señala en las otras respuestas):Esto devuelve un valor
IEnumerable
siempre quea
no sea nulo.fuente
La forma con la menor sobrecarga de espacio es usar el método de extensión Concat.
Crea una instancia de la
IEnumerable<T>
cual enumerará los elementos de list1 y list2 en ese orden.fuente
using System.Linq;
poder usar ConcatEl método de la Unión podría abordar sus necesidades. No especificó si el pedido o los duplicados eran importantes.
Tome dos IEnumerables y realice una unión como se ve aquí:
fuente
Algo como esto:
O bien, puede usar el método de extensión 'Unión' que se define en System.Linq. Con 'Unión', también puede especificar un comparador, que puede usarse para especificar si un artículo debe estar unido o no.
Me gusta esto:
fuente
Está funcionando bien, creo que sí. Como se dijo anteriormente, Concat devuelve una nueva secuencia y, al convertir el resultado en Lista, hace el trabajo perfectamente. Las conversiones implícitas pueden fallar a veces cuando se usa el método AddRange.
fuente
Si existen algunos elementos en ambas listas, puede usar
fuente
Siempre que sean del mismo tipo, es muy simple con AddRange:
fuente
fuente
El método AddRange
fuente
fuente
una forma: List.AddRange () dependiendo de los tipos?
fuente
Una forma, no he visto mencionar que puede ser un poco más robusto, especialmente si desea alterar cada elemento de alguna manera (por ejemplo, quería
.Trim()
todos los elementos.fuente
Ver este enlace
// Obtenga los productos de ambas matrices // excluyendo duplicados.
fuente
Las dos opciones que uso son:
o
Sin embargo, noté que cuando usaba el
AddRange
método con una función recursiva, que se llama a sí mismo muy a menudo, recibí una excepción SystemOutOfMemoryException porque se alcanzó el número máximo de dimensiones.(Mensaje traducido por Google)
Las dimensiones de la matriz excedieron el rango admitido.
Usando
Concat
resuelto ese problema.fuente
Solo quería probar cómo
Union
funciona con el comparador predeterminado en colecciones superpuestas de objetos de tipo de referencia.Mi objeto es:
Mi código de prueba es:
El resultado es:
Entonces, todo funciona bien.
fuente