0

私はプロジェクトのオイラー問題の 1 つに取り組んでおり、値のリストを作成し、そのリストをハッシュセットに追加するというアプローチを取りたいと考えていました。このようにして、リストがハッシュセットに既に存在するかどうかを一定時間で評価できました。 、私の最終結果のためにハッシュセット内のリストの数を数えることを最終目標としています。

私が抱えている問題は、この方法でリストを作成するときです。

HashSet<List<int>> finalList = new HashSet<List<int>>();
List<int> candidate = new List<int>();
candidate.Add(5);
finalList.Add(candidate);

if (finalList.Contains(candidate) == false) finalList.Add(candidate);
candidate.Clear();

//try next value

明らかにfinalList[0]、候補をクリアするとアイテムがクリアされ、望ましい結果が得られません。このような(整数の)リストのハッシュセットを持つことは可能ですか? 新しいリストが毎回インスタンス化され、新しいアイテムとしてハッシュセットに追加されるようにするにはどうすればよいでしょうか。たとえば、多くの値と可能なリストの組み合わせをテストする for ループで言えますか?

4

3 に答える 3

1

リストごとに一意の値をキーまたは識別子として使用しないのはなぜですか? リストのロックを解除するキーの HashSet を作成できます。

于 2013-04-09T01:19:42.997 に答える
0

問題を解決するにclearは: オブジェクト参照であるため、 を作成してnew Listに追加する必要がありHashSetます。古いリストをコンストラクターに渡すことで、新しいリストを作成できます。

        HashSet<List<int>> finalList = new HashSet<List<int>>();
        List<int> candidate = new List<int>();

        candidate.Add(5);

        var newList = new List<int>(candidate);
        finalList.Add(newList);

        if (finalList.Contains(newList) == false) //Not required for HashSet
            finalList.Add(newList);

        candidate.Clear();

:アイテムを追加HashSetする前に、内部的に a containsつまり、ここで何回実行してfinalList.Add(newList); nも、加算newListされるのは 1 回だけです。したがって、contains チェックを行う必要はありません。

于 2013-04-09T02:39:17.103 に答える