es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comparación de una colección de objetos de tipo referencia para determinar si son iguales, ignorando el orden de los elementos en la colección.

Tengo las siguientes clases de muestra:

public class Item
{
    public string name { get; set; }
    public double price { get; set; }
}

public class Basket
{
    public Item[] items;
}

Luego hice dos instancias de Basket, ambas conteniendo objetos Item:

var basket1 = new Basket()
{
   items = new Item[]
   {
       new Item() { name = "bread", price = 1.5 },
       new Item() { name = "butter", price = 2 }
   }
};

var basket2 = new Basket()
{
   items = new Item[]
   {
       new Item() { name = "butter", price = 2 },
       new Item() { name = "bread", price = 1.5 }
   }
};

Me gustaría comparar Basket1 con Basket2, ignorando el orden de los elementos en la cesta. Este ejemplo debería devolver True (son iguales) cuando se comparan. ¿Cómo debo proceder?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para comparar “Basket1” con “Basket2” sin tener en cuenta el orden de los elementos en la canasta, podemos usar el método “SequenceEqual” del espacio de nombres “System.Linq” en C #.

    Así es como podemos usarlo:

    usando System.Linq;
    
    // ...
    
    bool sonIguales = basket1.items.OrderBy(i => i.name)
                              .SequenceEqual(basket2.items.OrderBy(i => i.name));
    

    En el código anterior, primero usamos el método “OrderBy” para ordenar los elementos en ambas canastas por sus nombres. Luego, usamos el método “SequenceEqual” para comparar las dos matrices ordenadas. El método “SequenceEqual” verifica si ambas matrices contienen los mismos elementos en el mismo orden.

    Al hacerlo, podemos ignorar el orden de los elementos en la canasta y determinar si las dos instancias de “Basket” son iguales. La variable “sonIguales” sería “True” en este caso.

Comments are closed.