次のコードを使用して、テキストファイルをハッシュセットにロードします。
HashSet<string> hashs = new HashSet<string>(File.ReadLines("textFile.txt"));
そこからランダムな線を取得する簡単な方法があるかどうか疑問に思っていますか?
textFile.txtに10行が含まれていると仮定して、それらの既存の行の1つをランダム化して取得したいと思います。
毎回配列全体を列挙しなくても、受け入れられているような単純な答えが可能です。
private static readonly Random random = new Random();
private static readonly HashSet<T> hashset = new HashSet<T>();
...
T element = hashset.ElementAt(random.Next(hashset.Count));
Random randomizer = new Random();
string[] asArray = hashs.ToArray()
string randomLine = asArray[randomizer.Next(asArray.length)];
0 からセットのサイズまでの乱数を生成し、生成された数と同じインデックスを持つアイテムに到達するまで、セットアップを繰り返します。次に、このアイテムをランダム要素として選択します
または、列挙可能なものに対するより一般的な解決策かもしれません
public static class RandomExtensions
{
private static readonly Random rnd = new Random();
private static readonly object sync = new object();
public static T RandomElement<T>(this IEnumerable<T> enumerable) {
if (enumerable == null)
throw new ArgumentNullException("enumerable");
var count = enumerable.Count();
var ndx = 0;
lock (sync)
ndx = rnd.Next(count); // returns non-negative number less than max
return enumerable.ElementAt(ndx);
}
}