Каков наиболее эффективный способ создания отдельного списка элементов с помощью .NET?

StackOverflow https://stackoverflow.com/questions/1727894

Вопрос

У меня есть большой список значений (100–200 строк символов), и мне нужно вернуть их отдельный список.Каков наиболее эффективный способ сделать это с помощью .NET?Я могу придумать два способа:

  1. Используйте метод Distinct() класса IEnumerable.
  2. Используй словарь

Если словарный подход быстрее в исходном выражении, рассмотрите компромиссное решение в отношении удобства сопровождения кода.

Это было полезно?

Решение

я бы ожидал Enumerable.Distinct быть примерно таким же быстрым, как использование словаря, если вы делаете это только один раз.Если вы хотите иметь возможность добавлять/удалять значения и сохранять различимость, вы можете создать HashSet<string> (по сути, это именно то, что, как я ожидаю, делает Distinct под капотом, но Distinct() очевидно, будет возвращать новые значения по мере их обнаружения, сохраняя порядок.

Фактически, просто используя:

HashSet<string> distinctItems = new HashSet<string>(list);

будет довольно хорошим (и простым) решением, если вы не возражаете против того, чтобы порядок был испорчен.Это проще, чем использовать Dictionary, а также концептуально чище (поскольку вы не Действительно хотите сопоставить ключи со значениями).

(Как всегда, я бы посоветовал сначала найти наиболее читабельное решение и протестировать его - если оно «достаточно быстрое», то используйте его.Если вы хотите использовать это как часть другого запроса, то Distinct вполне может быть наиболее читаемым способом.В противном случае я бы предложил HashSet.)

Другие советы

Лично я бы использовал метод Distinct(), предоставляемый LINQ.Его гораздо проще читать и поддерживать.Хотя использование LINQ будет медленнее, чем использование словаря, разница будет небольшой (в случае, который вы указали), и вам лучше потратить время на оптимизацию запросов к базе данных или вызовов веб-служб.

Я бы посоветовал вам использовать здесь профилирование.Создайте список с примерами элементов, отсортируйте его, скажем, 1 миллион раз, используя оба способа, и измерьте время, затраченное каждым способом.

Если читаемость вызывает беспокойство, создайте GetDistinctItems метод и поместите в него свой код:вуаля, самодокументированный код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top