I would expect Enumerable.Distinct
to be about as fast as using a dictionary if you're only doing it once. If you want to be able to add/remove values and keep the distinct-ness, you could build a HashSet<string>
(which is basically what I expect Distinct is doing under the hood, but Distinct()
will obviously return new values as it finds them, maintaining order.
In fact, just using:
HashSet<string> distinctItems = new HashSet<string>(list);
will be a pretty good (and simple) solution if you don't mind the ordering being messed up. It's simpler than using a Dictionary
, and conceptually cleaner as well (as you don't really want to map keys to values).
(As ever, I would suggest finding the most readable solution first, and benchmark it - if it's "fast enough" then go with that. If you want to use this as part of another query, then Distinct
may well be the most readable way. Otherwise, I'd suggest HashSet
.)