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

うーん...まあ、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)は、2つのセットの「OR」を示し、2つのセットIEnumerable<T> Intersect(IEnumerable<T> other)のオーバーラップを示します。IEnumerable<T>ISet<T>

于 2013-02-14T19:20:40.193 に答える
0

HashSet メソッドを使用Containsして、値が既に存在するかどうかを確認できます。

例 :

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

私たちContainsメソッド:http://msdn.microsoft.com/en-us/library/bb356440.aspx

お役に立てれば。

于 2013-02-14T19:16:33.187 に答える
-2

これを試すことができます。1 つのテキストボックスと 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 に答える