【问题标题】:Using HashSet<int> to create an integer set使用 HashSet<int> 创建整数集
【发布时间】:2013-01-30 16:41:12
【问题描述】:

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

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 添加一些值,但我看不出这如何跟踪集合中包含的值。有什么想法吗?

【问题讨论】:

  • HashSet 还会在 .Add 方法上返回 truefalse,告诉您该项目是成功添加还是已存在于集合中。

标签: c# int set


【解决方案1】:

散列集有一个Contains 方法,允许您检查一个值是否在集合中。

此外,HashSet&lt;T&gt; 实现了ISet&lt;T&gt; 接口,因此提供了许多处理集合的方法,例如并集、交集以及确定一组值是(正确的)超集还是集的子集.

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();

【讨论】:

    【解决方案2】:

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

    例子:

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

    【讨论】:

      【解决方案3】:

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

      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");
              }
          }
      

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

      【讨论】:

        【解决方案4】:

        嗯...嗯,HashSet&lt;T&gt; 实现了IEnumerable&lt;T&gt;,所以你总是可以这样做来找出“里面已经有什么”:

        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&lt;T&gt; Union(IEnumerable&lt;T&gt; other) 会告诉你两组的“或”,IEnumerable&lt;T&gt; Intersect(IEnumerable&lt;T&gt; other) 会告诉你两组的重叠。 .IEnumerable&lt;T&gt;ISet&lt;T&gt; 中的几乎所有内容

        【讨论】:

          【解决方案5】:

          使用 Contains 方法:http://msdn.microsoft.com/en-us/library/bb356440.aspx

          希望这会有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-08-16
            • 2020-06-07
            • 1970-01-01
            • 1970-01-01
            • 2018-07-06
            • 1970-01-01
            • 2014-03-04
            相关资源
            最近更新 更多