Is there a class like Dictionary<> in C#, but for just keys, no values?
Try using the HashSet<T>
class.
Edit: I spent a long long time doing exactly what you did until I just stumbled on this class while reading a blog.
Chuck Wilbur
Currently a DevOps engineer in AWS (Jenkins, jx, CDK, CloudFormation) Coded in C++ on AutoCAD's ARX API from 1998-2010. Some experience using VBA, XML, javascript and C#
Updated on June 27, 2022Comments
-
Chuck Wilbur almost 2 years
I guess another way to phrase this would be "Is there a class like
List<>
in C#, but optimized for checking whether a particular value is present?" I'm sure for a small set of valuesList<>.Contains
would probably be fine, but what if I have a set of thousands or millions of values and wanted to find out whether a certain value was in it?I've implemented this kind of thing in the past by creating a
Dictionary<object, int>
and setting the value to 0 for every key, but this feels really clunky. And now there's Stack Overflow, where my stupid question can be transformed into education for thousands (dozens, even). So here it is!I'm not even sure what such a class would be called, other than maybe Set, so obviously searches on the topic have been... challenging :)
-
R. Martinho Fernandes about 14 yearsAlso, in .NET 4, this class now implements the new
ISet<T>
interface, along with its also-new cousinSortedSet<T>
, which is the same, but with order semantics. -
jjxtra about 14 yearsBack in the dark days of .NET 1.0 and 2.0 we just made a class that essentially worked like HashSet but used a dictionary of <TKey, byte> underneath.
-
Ryan Emerle about 14 years@Jeff same here, though we used <T,bool>
-
R. Martinho Fernandes about 14 years@Jeff: you just made me feel nostalgic. I'm not sure that's a good thing.
-
Aaronaught about 14 yearsIn the .NET 2.0 days I just used the PowerCollections library which already had a
Set<T>
,Bag<T>
, and ordered variants... pretty much everything that MS finally got around to including in .NET 4. I thought everybody knew about it. :P -
yfeldblum about 14 yearsThe
Iesi.Collections
library ships with NHibernate. It includes implementations ofISet<T>
etc. -
Larry over 8 yearsI accidentally build a Dictionary<object, object>()
-
Douglas Gaskell almost 5 yearsNote that you can't access a HashSet indexer like a Dictionary. Say your key is a string, you can't do
myHash["mykey"]
where in a dictionary you can.