C # Коллекции для Различных Данных - PullRequest
1 голос
/ 20 декабря 2011

У меня есть куча строковых данных, и я могу просмотреть их один за другим. Что такое хорошая коллекция (и как ее реализовать), чтобы я мог получать только отдельные строки?

Клиент, для которого я делаю это, даже не использует .NET 3.5, поэтому .Distinct отсутствует. Они используют .NET Framework 2.0.

И я читаю список по одному и не знаю, сколько у него будет записей, пока я не закончу.

Ответы [ 3 ]

2 голосов
/ 20 декабря 2011

Один из способов - использовать Distinct , чтобы сделать ваши строки уникальными:

List<string> a = new List<string>();
a.AddRange(new string[] { "a", "b", "a", "c", "d", "b" });
List<string> b = new List<string>();
b.AddRange(a.Distinct());

Еще один ресурс в разделе LINQ's Distinct: http://blogs.msdn.com/b/charlie/archive/2006/11/19/linq-farm-group-and-distinct.aspx

Другой способ: используйте HashSet , как предложили другие;

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

Найдите эту ссылку, чтобы увидеть, как реализовать ее в .net 2.0: https://stackoverflow.com/a/687042/284240

Если вы не используете 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

https://stackoverflow.com/a/1205813/284240

1 голос
/ 20 декабря 2011

Если вы используете .Net 3.5 или выше, поместите строки в List<> и используйте метод linq Distinct().

using System.Linq;

IEnumerable<string> strs = new List<string>(new[] { "one", "two", "three", "one" });

var distinct = strs.Distinct();

В .Net 2.0 у вас нет выбора, кроме каксделать это вручную.

0 голосов
/ 20 декабря 2011

Возможно, я не совсем понимаю вопрос, но разве вы не можете просто использовать обычный список и просто использовать метод .Contains, чтобы проверить, существует ли каждая строка в списке, прежде чем добавлять ее в цикл?Возможно, вам придется следить за производительностью, если у вас много строк.

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