4

我想创建一个使用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,但我看不出它如何跟踪集合中包含的值。有任何想法吗?

4

5 回答 5

19

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

此外,它HashSet<T>实现了ISet<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

顺便说一句,你知道集合初始化语法吗?


您还可以foreach在集合上获取它包含的每个元素(以未指定的顺序):

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

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

int[] arr = intTest.ToArray();
List<int> lst = intTest.ToList();
于 2013-02-14T19:14:51.657 回答
0

您可以使用 HashSetContains方法来判断该值是否已经存在!

例子 :

if (intTest.Contains(5))
{
    // already has the value
}
于 2013-02-14T19:17:04.853 回答
0

嗯......嗯,一个HashSet<T>implements 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>

于 2013-02-14T19:20:40.193 回答
-1

我们包含方法:http: //msdn.microsoft.com/en-us/library/bb356440.aspx

希望这可以帮助。

于 2013-02-14T19:16:33.187 回答
-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");
        }
    }

如果您再次遇到问题,只需删除您的代码.....

于 2013-02-14T19:49:41.787 回答