2013-02-14 80 views
4

我想创建一个类,它使用HashSet<int>来表示一个整数集。我希望它使用该内部容器跟踪哪些值包含在集合中。我到目前为止已经做到了这一点:使用HashSet <int>来创建一个整数集

class SetInteger 
{ 
    HashSet<int> intTest= new HashSet<int>(); 
    intTest.Add(1); 
    intTest.Add(2); 
    intTest.Add(3); 
    intTest.Add(4); 
    intTest.Add(5); 
    intTest.Add(6); 
    intTest.Add(7); 
    intTest.Add(8); 
    intTest.Add(9); 
    intTest.Add(10); 
} 

所以,在这里我想我加入了一些值到HashSet,但我没有看到这如何能保持跟踪包含在一套价值观。有任何想法吗?

+0

'HashSet'也返回TRUE或'FALSE'在'.Add'方法告诉您该项目是否成功添加或它已经存在于集合中。 – Marc 2013-02-14 19:19:03

回答

19

散列集有一个Contains方法,可以让你检查一个值是否在集合中。

此外,HashSet<T>实现了接口,因此提供了许多用于处理集合的方法,例如并集,交集并确定一组值是否是您的集合的(适当)超集或子集。

HashSet<int> intTest = new HashSet<int>() 
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 

bool has4 = intTest.Contains(4); // Returns true 
bool has11 = intTest.Contains(11); // Returns false 
bool result = intTest.IsSupersetOf(new []{ 4, 6, 7 }); // Returns true 

顺便说一句,你知道的collection initializer语法?


您也可以foreach就设置为得到它包含的每个元素(在未指定的顺序排列):

foreach(int value in intTest) 
{ 
    // Do something with value. 
} 

或将其转换为一个数组或可变列表(也未指定顺序):

int[] arr = intTest.ToArray(); 
List<int> lst = intTest.ToList(); 
+0

你打败了我。 +1 – 2013-02-14 19:15:13

0

您可以使用HashSet Contains方法tell的值是否已经存在!

例子:

if (intTest.Contains(5)) 
{ 
    // already has the value 
} 
0

嗯...嗯,一个HashSet<T>实现IEnumerable<T>,所以你总是可以做到这一点搞清楚 “什么是已经在那里”:

HashSet<int> intTest= new HashSet<int>(); 
intTest.Add(1); 
intTest.Add(2); 
intTest.Add(3); 
intTest.Add(4); 
intTest.Add(5); 
intTest.Add(6); 
intTest.Add(7); 
intTest.Add(8); 
intTest.Add(9); 
intTest.Add(10); 
var inThereNow = intTest.ToArray(); // [1,2,3,4,5,6,7,8,9,10] 

还有bool Contains(T value)它会告诉你是否有一个特定的值,IEnumerable<T> Union(IEnumerable<T> other)它会告诉你两个集合的“或”,IEnumerable<T> Intersect(IEnumerable<T> other)它会告诉你两个集合的重叠......几乎任何东西都在IEnumerable<T>ISet<T>

-2

你可以试试这个。你只需要一个文本框和两个按钮。

HashSet<int> hs = new HashSet<int>(); 
    private void savedataonhashSet_Click(object sender, EventArgs e) 
    { 

     hs.Add(Convert.ToInt16(textBox1.Text)); 
    } 

    private void checkduplicatevalue_Click(object sender, EventArgs e) 
    { 
     if (hs.Contains(00))   

     { 
      MessageBox.Show("it is"); 
     } 
     else 
     { 
      MessageBox.Show("not there"); 
     } 
    } 

如果再次面临的问题刚落,你的代码.....