Я бы ожидал, что Enumerable.Distinct
будет примерно таким же быстрым, как использование словаря, если вы делаете это только один раз. Если вы хотите иметь возможность добавлять / удалять значения и сохранять четкость, вы можете создать HashSet<string>
(что, в общем-то, я и ожидаю, что Distinct делает под капотом, но Distinct()
, очевидно, будет возвращать новые значения по мере находит их, поддерживая порядок.
На самом деле, просто используя:
HashSet<string> distinctItems = new HashSet<string>(list);
будет довольно хорошим (и простым) решением, если вы не возражаете против того, чтобы порядок был испорчен. Это проще, чем использовать Dictionary
, и концептуально чище (так как вы не действительно хотите сопоставить ключи со значениями).
(Как всегда, я бы посоветовал сначала найти наиболее читаемое решение и сравнить его - если оно «достаточно быстрое», то иди с этим. Если ты хочешь использовать это как часть другого запроса, то Distinct
вполне может быть наиболее читабельным способом. В противном случае, я бы предложил HashSet
.)