tengo 2 campos de cadena:recuento de elementos idénticos en dos matrices en LINQ
A1: {"aa","bb","cc","dd","ee"}
A2: {"cc","dd,"ee","bla","blu"}
¿Cómo calculo el número de elementos idénticos entre A1
y A2
(en este caso 3)?
tengo 2 campos de cadena:recuento de elementos idénticos en dos matrices en LINQ
A1: {"aa","bb","cc","dd","ee"}
A2: {"cc","dd,"ee","bla","blu"}
¿Cómo calculo el número de elementos idénticos entre A1
y A2
(en este caso 3)?
El más corto probablemente sería la siguiente:
A1.Intersect(A2).Count()
Esto es 3 caracteres más corto. A1.Count (A2.Contains) :) (Todavía preferiría su solución) – BlueVoodoo
@BlueVoodoo hace el enfoque 'Count Contains' hacer lo correcto en presencia de duplicados? (ver el comentario aclaratorio de Asker) – AakashM
@BlueVoodoo, por el interés, a1.Count (a2.Contains); gana con 00: 00: 05.7862636! – ericosg
El siguiente funciona bien y puede producir un mayor rendimiento cuando se utilizan listas:
List<string> a1 = new List<string>() { "aa", "bb", "cc", "dd", "ee" };
List<string> a2 = new List<string>() { "cc", "dd", "ee", "bla", "blu" };
a1.Count(match => a2.Contains(match));
o (gracias @BlueVoodoo) una solución más corto que lleva a cabo solamente ligeramente más rápido:
a1.Count(a2.Contains);
Pero estas soluciones contar duplicados también, por tanto, en e podría usar:
HashSet<string> a1 = new HashSet<string>() { "aa", "bb", "cc", "dd", "ee" };
HashSet<string> a2 = new HashSet<string>() { "cc", "dd", "ee", "bla", "blu" };
Que evita los duplicados ya que un HashSet conserva solo una secuencia única.
Después de la evaluación comparativa de lo anterior, HashSet con a1.Count (a2.Contains); proporciona la solución más rápida, incluso con la sobrecarga de la construcción de HashSet.
No es necesario ponerlos en listas, ya que puede hacer que A1.Count (A2.Contains) directamente en las matrices (aún así me gustaría ir a Pavel's intersect). – BlueVoodoo
Por el amor de interés, esta solución corre más rápido que Intersect() el amor de – ericosg
Además interés algunos puntos de referencia: a 10.000.000 iteraciones, Intersección vs LINQ y Lambda: con listas: 00: 00: 09,9623558 vs 00: 00: 06,2140126 con matrices: 00: 00: 09.5918331 vs 00: 00: 48.9175518 naturalmente, linq sigue creando objetos IEnumerable de las matrices, produciendo sobrecarga, pero una vez que todas las listas son realmente más rápidas. – ericosg
int[] id1 = { 44, 26, 92, 30, 71, 38 };
int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };
id1.Intersect(id2).Count();
siguiente código debe hacer el truco
var A1 = new[] { "aa", "bb", "cc", "dd", "ee"};
var A2 = new[] { "cc", "dd", "ee", "bla", "blu" };
var query = from one in A1
join two in A2 on one equals two
select one;
var result = query.ToArray();//this should have { "cc", "dd", "ee" }
¿Qué desea que suceda si hay duplicados en una de las matrices? – Dan
Quiero que cuenten como 1 coincidencia – user560498