2010-04-30 6 views
1

J'ai un ClientState de classedouble Supprimer les valeurs

Class ClientState 
{ 
Public int ID{get;set;} 
public string State{get;set;} 
} 

List<ClientState> listClientState qui contiennent tous les états des Etats-Unis, maintenant problème est peut listClientState contenir des objets qui ont des états doublons. Comment puis-je filtrer listClientState pour enlever enregistrement en double

+1

Pouvez-vous avoir deux ClientStates avec des ID différents mais avec le même état? Si oui, lequel des deux ID souhaitez-vous conserver dans la liste après la suppression des doublons? –

Répondre

1

Avez-vous essayé listClientState.Distinct().ToList()

2

Vous pouvez écrire un comparateur

class ClientStatesComparer : IEqualityComparer<ClientState> 
{ 
    public bool Equals(ClientState x, ClientState y) 
    { 
     return x.State = y.State; 
    } 

    public int GetHashCode(ClientState obj) 
    { 
     return obj.State; 
    } 
} 

et utiliser

listClientState = listClientState.Distinct(new ClientStatesComparer()).ToList(); 

Vous aurez bien sûr les dossiers en vrac (c'est à dire perdre l'ID) de cette façon. Si chaque ID est unique à un état, la solution de Veers le fera.

0

Vous pouvez utiliser un HashSet<>, ce qui interdit les doublons (il les ignore simplement sur Add()). Outre les réponses affichées, vous pouvez également créer un HashSet à partir d'une liste, et tous les doublons sont ignorés:

HashSet<ClientState> noDupes = new HashSet<ClientState>(listWithDupes); 
List<ClientState> listNoDupes = noDupes.ToList(); 
0

exemple très simple:

public class ClientState : IComparable<ClientState> 
{ 
    public int ID { get; set; } 
    public string State { get; set; } 

    public override string ToString() 
    { 
     return String.Format("ID: {0}, State: {1}", ID, State); 
    } 

    #region IComparable<ClientState> Members 

    public int CompareTo(ClientState other) 
    { 
     return other.State.CompareTo(State); 
    } 

    #endregion 
} 

static void Main(string[] args) 
     { 

      List<ClientState> clientStates = new List<ClientState> 
               { 
                new ClientState() {ID = 1, State = "state 1"}, 
                new ClientState() {ID = 2, State = "state 1"}, 
                new ClientState() {ID = 4, State = "state 3"}, 
                new ClientState() {ID = 11, State = "state 2"}, 
                new ClientState() {ID = 14, State = "state 1"}, 
                new ClientState() {ID = 15, State = "state 2"}, 
                new ClientState() {ID = 21, State = "state 1"}, 
                new ClientState() {ID = 20, State = "state 2"}, 
                new ClientState() {ID = 51, State = "state 1"} 
               }; 

      removeDuplicates(clientStates); 
      Console.ReadLine(); 
     } 

     private static void removeDuplicates(IList<ClientState> clientStatesWithPossibleDuplicates) 
     { 
      for (int i = 0; i < clientStatesWithPossibleDuplicates.Count; ++i) 
      { 
       for (int j = 0; j < clientStatesWithPossibleDuplicates.Count; ++j) 
       { 
        if (i != j) 
        { 
         if (clientStatesWithPossibleDuplicates[i].CompareTo(clientStatesWithPossibleDuplicates[j]) == 0) 
         { 
          clientStatesWithPossibleDuplicates.RemoveAt(i); 
          i = 0; 
         } 
        } 
       } 
      } 
     } 

Sortie:

ID: 4, State: state 3 
ID: 20, State: state 2 
ID: 51, State: state 1 
+0

Est-ce une blague ?? –

+0

Oui, mais cela fait l'affaire: P Vous pouvez toujours l'optimiser si vous le souhaitez. –

Questions connexes