2009-03-05 22 views
2

C#を使用して各桁に数字の0〜9を使用して、(かなり自動ではない)ユニークな4桁の文字列を生成する方法を探しています。一意性を検証し、dupが見つかった場合は別の番号を生成できます。私はDateTimeオブジェクトのTicksプロパティに何らかの形で番号を付けることを考えていましたが、作品をまとめるのは困難です。ユニークな4桁の文字列を生成する方法

ご意見や専門知識があれば幸いです。

答えて

9

それ自体がインクリメントされない場合、2度目にどのようにユニークになるのでしょうか?

すべての未使用の4桁の文字列からランダムな4桁の文字列を生成したいとお考えですか?

もしそうなら、正しい方法は通常、可能なすべての4桁の文字列を生成し、それらをランダムな順序にシャッフルします。それから、新しいものが必要なときにそれらを順番に服用してください。

解説:他の回答は、単純にランダムな4桁の文字列を生成し、それをそのままにすることをお勧めします。おそらく、すでに使用されているかどうかを確認し、使用されている場合は別のものを生成すると考えられます。これは、極端に最適ではないパフォーマンスを持つ可能性があります。可能な4桁の文字列のうち、0000から9999までの9,999文字(すべて1つを除く)をすでに使用しているとします。最後の文字列を生成するには、このメソッドに多くの試行が必要です。

+0

理想的には、私はグローバルにユニークな価値を持っていたいと思います。問題は、それぞれに0〜9の数値だけを使用して、非常に短い桁数(たとえば4または5)が必要なことです。私は、衝突の可能性が低いために撮影しているという点で、GUIDのようなものが好きです。 – goombaloon

+0

@unknown:衝突の確率は1/10000(開始時)で、IDを使い切ると悪化します。結局、衝突の可能性が非常に高くなり、IDが足りなくなります。 –

+0

衝突があっても問題がなければ、10,000個の値のリスト全体を生成し、それらをシャッフルして、それを引き渡します。 10,000を使い切るまでは、誰もがユニークなものを持っています。あなたが終わりに達すると、最初からやり直してください。新しいものは1回の衝突があります。 – mquander

-1

0-9からそれぞれ4つの乱数を生成し、それらに文字列連結を行います。

-3
Random randomNumberGenerator = new Random(); 
return string.Concat(
    randomNumberGenerator.Next(0, 9), 
    randomNumberGenerator.Next(0, 9), 
    randomNumberGenerator.Next(0, 9), 
    randomNumberGenerator.Next(0, 9)); 
1

ショートタイプを使用して10000の値をすべて配列し、次にshuffleを作成します。

+0

これはこのサイトの別の問題に対する答えとして示唆されました。それは良い提案です。ランダムな順序で数値のテーブルを作成し、新しいランダムな文字列が必要になるたびにテーブルから1つを選択して削除します。 –

0

要件によって異なります。これらのうちどれだけあなたが生成すると予想していますか?数百だけ必要な場合は、0から9999までの乱数を生成することができます。10,000をすべて生成すると予想される場合は、Earwickerが述べたようにして、使用されていないすべての値のリストを維持する必要があります。

私は、最も単純なアルゴリズム(乱数1から9999を選ぶ)から始め、それが遅すぎるまで使用することをお勧めします。その後、戻ってEarwicker'sに入れてください。

関連する問題