はい、できますが、主に特定の要件に基づいています。
ランダムな文字列
以下は、特定length
の a ~ z 文字の文字列 (97 ~ 122) のASCII コードchar
を生成し、それらを文字列に追加する前に s に変換することによって、文字列を作成する関数の例です。
public string BuildRandomString(Random random, int length)
{
var random = new Random();
string text = string.Empty;
for (int i = 0; i < length; i++)
text += (char)random.Next(97, 122);
return text;
}
100のリスト
これを使用して、List
次のように 100 個のランダムな文字列を生成できます。
var random = new Random();
var strings = new List<string>();
for (int i = 0; i < 100; i++)
strings.Add(BuildRandomString(random, 10));
さまざまな長さ
これをさらに拡張して、次のようなさまざまな長さの文字列を取得できます。
public string BuildRandomString(Random random, int minLength, int maxLength)
{
var text = string.Empty;
var length = random.Next(minLength, maxLength);
for (int i = 0; i < length; i++)
text += (char)random.Next(97, 122);
return text;
}
さらなる拡張
このメソッドは、好きなものを与えるように拡張できます。改善の例として、生成された各文字列に少なくとも 1 つの母音があることを確認して、より単語のように見えるようにすることができます。
要件に基づいてより理想的な結果を得るためにメソッドを拡張する場合、ASCII テーブルは便利です。
System.Random
Random
オブジェクトがインスタンス化され、メソッドへの引数として渡されていることに気付くでしょう。BuildRandomString()
「疑似乱数」がどのように機能するかという理由で、単に新しいものをインスタンス化することはできません。それらは、最初の数、2 番目の数などを決定する「シード」を取ります。たとえば、同じ「ランダム」データで複数回作業したい場合は、シードを明示的に指定できるため、これには利点がありますnew Random(102302)
。
シードを使用しない場合、システム クロックに基づいてシードを生成するデフォルトのコンストラクタが使用されます。問題は、この数値が連続して使用されると同じシードを返すため、同じ変数を使用する必要があることです。メソッドを含むクラスのメンバー変数にすることも簡単BuildRandomString
です。
MSDN から:
デフォルトのシード値はシステム クロックから派生し、有限の分解能を持ちます。その結果、既定のコンストラクターの呼び出しによって連続して作成されるさまざまな Random オブジェクトは、同じ既定のシード値を持つため、同じ乱数のセットが生成されます。この問題は、単一の Random オブジェクトを使用してすべての乱数を生成することで回避できます。
それを指摘してくれたdialerに感謝します。