Использование Custom Generic Collection быстрее с объектами, чем List - PullRequest
3 голосов
/ 26 апреля 2010

Я перебираю List<>, чтобы найти соответствующий элемент. Проблема в том, что объект имеет только 2 значимых значения, Name и Link (обе строки), но имеет некоторые другие значения, которые я не хочу сравнивать.

Я подумываю использовать что-то вроде HashSet (именно это я и ищу - быстро) из .NET 3.5, но целевой фреймворк должен быть 2.0. Здесь есть что-то под названием Power Collections: http://powercollections.codeplex.com/, я должен это использовать?

Но, может быть, есть другой способ? Если нет, можете ли вы предложить мне подходящую коллекцию?

Ответы [ 2 ]

3 голосов
/ 26 апреля 2010

В .NET 2.0 вместо HashSet<T> вы можете использовать Dictionary<K, V>.

Dictionary использует хеш-код для поиска ключей, поэтому он имеет производительность, аналогичную HashSet. Есть как минимум два подхода:

  • Создайте пользовательский класс или структуру, содержащую имя и ссылку, и используйте их в качестве ключа в словаре, а объект укажите в качестве значения.
  • Сохраните весь объект в качестве ключа и предоставьте пользовательский компаратор равенства, который просматривает только члены Name и Link, и установите для него значение null.

Второй метод очень похож на то, как вы бы использовали HashSet, если бы он был доступен.

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

Как насчет этого:

Пользовательский класс / коллекция, в которой будет храниться список объектов и два словаря, один для имени и один для ссылки. Оба они будут иметь значение типа int, которое будет индексом объекта. Я думаю, что в этом случае мне нужно будет только проверить, есть ли такое значение int словаря имен, которое равно int словаря ссылок.

Это хороший подход?

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