Si tengo 2 matrices int a y b y contienen datos como este ...
a[0] = 1 a[1] = 3 a[2] = 7 b[0] = 6 b[1] = 3 b[2] = 5 ¿Cómo puedo verificar si todos los pares de números son únicos, por ejemplo, que cada combinación de a[i] y b[i] en el mismo índice no se repite en el resto de la matriz... Entonces, los datos anteriores pasarían pero si Presenté esto a continuación, fallaría ...
a[24] = 7 b[24] = 5Porque esta combinación ya existe en la matriz en el índice 2. ¿Puedo hacer esto en LINQ?
prueba esta muestra:
int [] aa = a.Distinct().ToArray();o :
public static bool HasDuplicates<T>(IList<T> items) { Dictionary<T, bool> map = new Dictionary<T, bool>(); for (int i = 0; i < items.Count; i++) { if (map.ContainsKey(items[i])) { return true; // has duplicates } map.Add(items[i], true); } return false; // no duplicates }y llama :
string[] strings = new[] { "1", "2", "3" }; Utility.HasDuplicates(strings)// this will return false int[] items=new []{1,2,3,1}; Utility.HasDuplicates(items)// this will return trueSi el orden de los valores en los pares sobre las dos matrices es significativo (es decir a[0] == 1, b[0] == 2 se considera diferente de a[0] == 2, b[0] == 1 ), entonces una forma de verificar la singularidad usando Linq es la siguiente:
bool unique = a.Zip(b).Distinct().Count() == a.Length;Si el orden de los valores en los pares NO es significativo, es un poco más complicado:
bool unique = a.Zip(b).DistinctBy( x => (Math.Min(x.First, x.Second), Math.Max(x.First,x.Second))) .Count() == a.Length;Estas soluciones suponen que se ignorarán los valores faltantes en una de las matrices.
(Nota: DistinctBy() solo está disponible en .Net 6.0 o posterior, o a través de un paquete NuGet).
Me las arreglé para resolver esto y resolver esto con:
a.Zip(b, (aPos, bPos) => new { aPosition = aPos, bPosition = bPos }).Distinct().Count()Esto me dirá cuántos conjuntos distintos de ambos valores en el mismo índice y así puedo calcular el resto desde aquí.
Disculpas si mi pregunta no fue clara.