Как удалить дубликаты из коллекции StringCollection в C #? - PullRequest
1 голос
/ 15 апреля 2010

Как удалить дубликаты из коллекции StringCollection в c #?Я искал более эффективный подход.StringCollection возвращается из API.

Ответы [ 4 ]

9 голосов
/ 15 апреля 2010

Просто используйте HashSet<string> в качестве своей коллекции, а не StringCollection. Он предназначен для предотвращения добавления дублирующих элементов путем сравнения хеш-кодов этих элементов (таким образом, он очень эффективен).

Редактировать: поскольку может показаться , в первую очередь вам возвращается StringCollection, тогда решение должно состоять в том, чтобы просто перебрать все элементы в StringCollection и добавить их в HashSet<string>, тем самым устраняя дубликаты. Метод расширения Enumerable.Distinct также подойдет, но я подозреваю, что это менее эффективно, поскольку он использует хеширование (а не просто обычное тестирование на равенство). Примерно так:

var noDuplicatesItems = stringCollection.Cast<string>().Distinct().ToArray();
1 голос
/ 15 апреля 2010

Если вы находитесь в v3.5 из Framework (или позже), то вы можете сначала преобразовать в IEnumerable<string>, а затем вызвать метод Distinct() для этого;т.е.:

// where foo is your .Collections.Specialized.StringCollection
IEnumerable<string> distinctList = foo.OfType<string>.Distinct()
1 голос
/ 15 апреля 2010
    StringCollection s = new StringCollection();
    s.Add("s");
    s.Add("s");
    s.Add("t");

    var uniques = s.Cast<IEnumerable>();
    var unique = uniques.Distinct();

    foreach (var x in unique)
    {
        Console.WriteLine(x);
    }

    Console.WriteLine("Done");
    Console.Read();

Не проверено на эффективность.

0 голосов
/ 15 апреля 2010

используя linq: myCollection.Cast<string>.Distinct().ToList(); или вы можете использовать HashSet, как предложил Noldorin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...