10
votes

.NET (C #) Comparant deux listes de chaînes et enlever les éléments non correspondants

Y a-t-il un moyen de comparer deux listes de chaînes (quelle que soit la sensibilité de cas) ou dois-je écrire un code personnalisé pour une telle comparaison? Je veux aussi supprimer des éléments non correspondants de mon dictionnaire.

par exemple xxx

maintenant après la comparaison, je veux avoir uniquement "valeur1" et "valeur2" dans lst2 .

Cordialement, JS

c#

1 commentaires

Veuillez réparer votre exemple, il devrait être LST1 et LST2


3 Réponses :


2
votes

Vous pouvez utiliser la méthode énumérable.InterSect

Reportez-vous à la documentation MSDN pour des exemples: http://msdn.microsoft. com / fr-US / bibliothèque / bb460136.aspx

Reportez-vous à la réponse de DYPPL pour la mise en œuvre de la comparaison insensible au cas.


2 commentaires

Nah, voir ma réponse, vous pouvez utiliser stringcomparer


Merci dyppl! Mise à jour de la réponse. C'était vraiment kool.



1
votes

Vous pouvez utiliser la méthode de l'extension code> code>. Pour le faire étudier insensible, vous pouvez utiliser un iéquitycomparer:

class Program
{
    static void Main(string[] args)
    {

        List<string> lst1 = new List<string>();
        List<string> lst2 = new List<string>();

        CaseInsensitiveEquityComparer comparer = new CaseInsensitiveEquityComparer();

        var result = lst1.Intersect(lst2, comparer);

    }
}

class CaseInsensitiveEquityComparer : IEqualityComparer<string>
{

    public bool Equals(string x, string y)
    {
        return String.Compare(x,y,true,CultureInfo.CurrentCulture) == 0;
    }

    public int GetHashCode(string obj)
    {
        return obj.GetHashCode();
    }
}


2 commentaires

Comparer des chaînes par touppper -ing-les? Mauvaise idée dans c #, il suffit d'utiliser string.carefare avec les options correspondantes


@DYPL, vrai - mais se précipita. Corrigé-le maintenant;)



24
votes

Vous pouvez utiliser linq intersect méthode.

lst2 = lst1.Intersect(lst2, StringComparer.InvariantCultureIgnoreCase).ToList();


0 commentaires