Как получить уникальные значения из коллекции в C #? - PullRequest
3 голосов
/ 30 июля 2009

Я использую C # + VSTS2008 + .Net 3.0. У меня есть вход в виде массива строк. И мне нужно вывести уникальные строки массива. Есть идеи, как это эффективно реализовать?

Например, у меня есть входные данные {"abc", "abcd", "abcd"}, я хочу получить вывод {"abc", "abcd"}.

Ответы [ 3 ]

19 голосов
/ 30 июля 2009

Использование LINQ:

var uniquevalues = list.Distinct();

Это дает вам IEnumerable<string>.

Если вы хотите массив:

string[] uniquevalues = list.Distinct().ToArray();

Если вы не используете .NET 3.5, это немного сложнее:

List<string> newList = new List<string>();

foreach (string s in list)
{
   if (!newList.Contains(s))
      newList.Add(s);
}

// newList contains the unique values

Другое решение (возможно, немного быстрее):

Dictionary<string,bool> dic = new Dictionary<string,bool>();

foreach (string s in list)
{
   dic[s] = true;
}

List<string> newList = new List<string>(dic.Keys);

// newList contains the unique values
9 голосов
/ 30 июля 2009

Другой вариант - использовать HashSet:

HashSet<string> hash = new HashSet<string>(inputStrings);

Думаю, я бы тоже пошел с linq, но это тоже вариант.

Edit:
Вы обновили вопрос до 3.0, возможно, это поможет: Использование HashSet в C # 2.0, совместим с 3,5

2 голосов
/ 30 июля 2009

Вы можете пойти с Linq его коротким и приятным, но если вы не хотите LINQ, попробуйте второй вариант HashSet

Вариант 1:

string []x = new string[]{"abc", "abcd", "abcd"};    
IEnumerable<string> y = x.Distinct();    
x = Enumerable.ToArray(y);

Вариант 2:

HashSet<string> ss = new HashSet<string>(x);
x = Enumerable.ToArray(ss);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...