Dado una clase con la siguiente definición:

public class MyTestClass
{
    public int ValueA { get; set; }
    public int ValueB { get; set; }
}

Cómo puede duplicar los valores se encuentran en un MyTestClass[] matriz?

Por ejemplo,

MyTestClass[] items = new MyTestClass[3];
items[0] = new MyTestClass { ValueA = 1, ValueB = 1 };
items[1] = new MyTestClass { ValueA = 0, ValueB = 1 };
items[2] = new MyTestClass { ValueA = 1, ValueB = 1 };

Contiene un duplicado, ya que hay dos MyTestClass objetos donde ValueA y ValueB tanto = 1

InformationsquelleAutor CatBusStop | 2011-04-08

3 Comentarios

  1. 43

    Usted puede encontrar los duplicados por la agrupación de sus elementos por ValueA y ValueB.
    Hacer un recuento de ellos y después de que usted va a encontrar cuáles son los duplicados.

    Esta es la manera de aislar a los incautos :

    var duplicates = items.GroupBy(i => new {i.ValueA, i.ValueB})
      .Where(g => g.Count() > 1)
      .Select(g => g.Key);
    • Exactamente lo que estaba buscando! Usted gana en internet. Muchas gracias.
  2. 4

    Sólo podría utilizar Jon Skeet del DistinctBy y Except juntos para encontrar duplicados. Ver esta Respuesta para su explicación de DistinctBy.

    MyTestClass[] items = new MyTestClass[3];
    items[0] = new MyTestClass { ValueA = 1, ValueB = 1 };
    items[1] = new MyTestClass { ValueA = 0, ValueB = 1 };
    items[2] = new MyTestClass { ValueA = 1, ValueB = 1 };
    
    MyTestClass [] distinctItems = items.DistinctBy(p => new {p.ValueA, p.ValueB}).ToArray();
    MyTestClass [] duplicates = items.Except(distinctItems).ToArray();

    Devolverá sólo un elemento y no tanto en los duplicados sin embargo.

  3. 1

    MyTestClass debe implementar el método Equals.

    public bool Equals(MyTestClass x, MyTestClass y)
    {
        if (Object.ReferenceEquals(x, y)) return true;
    
        if (Object.ReferenceEquals(x, null) ||
            Object.ReferenceEquals(y, null))
                return false;
    
            return x.ValueA == y.ValueA && y.ValueB == y.ValueB;
    }

    Aquí tienes un buen artículo sobre ella.

    Después de que usted puede conseguir una «limpia» de la lista de MyTestClass con «Distintas» método.

    • Si Distintos se va a trabajar, tendrás que hacer más que aplicar el método Equals. Debe implementar el IEquatable<MyTestClass> interfaz y asegúrese de implementar GetHashCode y el objeto es igual correctamente.
    • A la derecha, mi culpa 😉 de todos Modos no es demasiado trabajo… y puede ser interesante en muchos escenarios 😉

Dejar respuesta

Please enter your comment!
Please enter your name here