2

characters繰り返し処理する配列があります。今まで見たことのないキャラクターを見つけたら、何かをします。

これは、私がすでに会ったキャラクターを追跡する必要があることを意味します. 私の最初の選択は でしたがHashSet、これが正しい選択かどうかはわかりません.1 文字は2 文字hashingよりも長くかかる可能性があるからです. comparingこれは本当なのだろうか。

  1. HashSet はこれに適した選択ですか、それとも、たとえば非常に小さなハッシュを使用するか、まったく使用しないなどのより良いオプションがありますか。

清澄ダンプ

配列は実際には 2 次元配列であり、大学によって作成された関数から受け取ります。各キャラクターの位置も特定する必要があります。特定のタイプの文字に対して関数が 2 回呼び出されない限り、特定のタイプの文字の位置は関係ありません。

私が知る必要があるのは、多次元配列内のすべての一意の文字と、一意の文字ごとにこれらのいずれかの場所です。

4

4 に答える 4

3

ASCIIのみに関心がある場合は、サイズが 128 の配列を int にキャストするのが最善の方法です。

 boolean[] array = new bolean[128];
 char c = 'a';
 array[(int) c] = true; 

あらゆる種類のより大きなエンコーディングは、間違いなく私が考えるマップを使用するだけです。

于 2013-11-06T15:21:40.130 に答える
1

単純な char について話している場合は、次のような単純なものを使用できると思います。

bool[] map = new bool[256];

要素アクセスの場合:

map[(int)'a'];
于 2013-11-06T15:18:17.917 に答える
1

HashSet次のような配列から取得できます。

char[] array = new[] { 'a', 'a', 'b', 'c', 'c' };
HashSet<char> hashSet = new HashSet<char>(array);

自分で重複を比較して検出するよりも優れたアプローチです。

于 2013-11-06T15:17:24.417 に答える