5

から 3 行目を取得する方法はありHashSetますか? お気に入り

HashSet<string> ContinuedForums = new HashSet<string>();
ContinuedForums.add("a");
ContinuedForums.add("b");
string hellow = ContinuedForums[1];

はい、使用したいですHashSet

4

4 に答える 4

16

AHashSet<T>はその性質上unorderedです。

を介して 3 番目の要素を取得できますがContinuedForums.Skip(2).First()、これは必ずしも追加した「3 番目の」要素ではなく、要素を追加または削除すると順序が変わります。

順序を維持する必要がある場合、 aHashSet<T>は使用するコレクション タイプとして適切ではない可能性があります。インデックスによる順序やアクセスを維持するためのものではありません。

于 2013-05-28T16:43:17.150 に答える
4

順序とパフォーマンスのバランスを取りたい場合は、2 つの構造を保持する方がよいでしょう... O(1) ルックアップ用の HashSet<T> と、列挙型 (またはクイック インデックス アクセサー ルックアップ) 用の List<T> です。

于 2013-05-28T16:56:03.403 に答える
1

サードワンを追加したコンテキストで「サード」について話している場合、方法はありません。その情報は HashSet によって公開されません。これらの文字列を HashSet に追加すると、HashSet の内部実装の文書化されていない副作用です: 「one」、「two」、「three」その内容について。しかし、これは文書化されていない動作であるため、その動作に依存するコードを書くのは大きな間違いです。その理由は、HashSet の将来のバージョンがまったく異なる方法で動作する可能性があるためです。また、HashSet から「2」を削除してから「4」を追加した場合、HashSet を列挙すると、「1」、「4」、「3」が返される可能性が高いことに注意してください。

「位置」の概念全体は、HashSet の内部実装の詳細です。メソッドとプロパティで、位置に関する情報を提供することを約束するものは何も公開しません。したがって、HashSet のユーザーに関する限り、位置の概念は存在しません。

于 2013-05-28T17:00:58.297 に答える