私は文字列のリストを持っています。このリストからランダムに選択したいと思います。文字列を選択するときは、リストからを削除してにする必要があります。すべての文字列が選択されたときにのみ、リストはに再集計されますです。これをどのように達成するのですか?置換えのないリストからランダムな文字列を取り出すC#
0
A
答えて
0
まず、乱数ジェネレータを作成します。
Random rand = new Random();
次に、番号を生成してリストから項目を削除します。私はあなたがSystem.Collections.Generic.List
を使用していると仮定しています。
int num = Random.Next(list.Count);
list.RemoveAt(num);
0
あなたは非常に簡単にそれを実装することができます。
public static partial class EnumerableExtensions {
public static IEnumerable<T> RandomItemNoReplacement<T>(this IEnumerable<T> source,
Random random) {
if (null == source)
throw new ArgumentNullException("source");
else if (null == random)
throw new ArgumentNullException("random");
List<T> buffer = new List<T>(source);
if (buffer.Count <= 0)
throw new ArgumentOutOfRangeException("source");
List<T> urn = new List<T>(buffer.Count);
while (true) {
urn.AddRange(buffer);
while (urn.Any()) {
int index = random.Next(urn.Count);
yield return urn[index];
urn.RemoveAt(index);
}
}
}
}
をし、それを使用します。
public class RandomlyPickedWord
{
public IList<string> SourceWords{ get; set; }
protected IList<string> Words{ get; set; }
public RandomlyPickedWord(IList<string> sourceWords)
{
SourceWords = sourceWords;
}
protected IList<string> RepopulateWords(IList<string> sources)
{
Random randomizer = new Random();
IList<string> returnedValue;
returnedValue = new List<string>();
for (int i = 0; i != sources.Count; i++)
{
returnedValue.Add (sources [randomizer.Next (sources.Count - 1)]);
}
return returnedValue;
}
public string GetPickedWord()
{
Random randomizer = new Random();
int curIndex;
string returnedValue;
if ((Words == null) || (Words.Any() == false))
{
Words = RepopulateWords (SourceWords);
}
curIndex = randomizer.Next (Words.Count);
returnedValue = Words [curIndex];
Words.RemoveAt (curIndex);
return returnedValue;
}
}
:
private static Random gen = new Random();
...
var result = new List<string>() {"A", "B", "C", "D"}
.RandomItemNoReplacement(gen)
.Take(10);
// D, C, B, A, C, A, B, D, A, C (seed == 123)
Console.Write(string.Join(", ", result));
0
私が思うに、あなたは次のクラスのようにsomethink必要あなたは次の方法で使用すべきです:
IList<string> source = new List<string>();
source.Add ("aaa");
source.Add ("bbb");
source.Add ("ccc");
RandomlyPickedWord rndPickedWord = new RandomlyPickedWord (source);
for (int i = 0; i != 6; i++)
{
Console.WriteLine (rndPickedWord.GetPickedWord());
}
関連する問題
- 1. BLOBをランダムな文字列に置き換えます。
- 2. 重複のない配列リストからランダムな文字列を出力する
- 3. なぜ私の文字列にランダムに置き換えられた1文字がありますか?
- 4. python:与えられた文字列からのランダムな文字
- 5. pandas:置換文字列がターゲット部分文字列を置き換えない
- 6. c#オブジェクトのリストに重複のないランダムな文字列
- 7. 文字列Cの制御文字を置き換えます。
- 8. "ランダム"テキストを文字列(ワイルドカード)に置き換えます
- 9. C#で文字列のリストからランダムな文字列を生成しますか?
- 10. PHP:与えられた文字列からサブ文字列を取り出す
- 11. 文字列中のランダム値をランダム値に置き換えます。
- 12. Ruby配列から取り出した文字列をC/C++文字列に変換する方法
- 13. リスト内の文字列をリスト内の文字列の位置に基づいて置き換える方法
- 14. Rubyの文字列のリストからランダムな出力を得るには
- 15. エルムのシンプルな文字列を置き換えますか?
- 16. 文字列内の文字をランダムに置き換える方法は?
- 17. 文字列を取得し、他の文字列に置き換えますか?
- 18. PHPリストから単語をランダムな単語に置き換えますか?
- 19. ランダムな文字列を出力する
- 20. ランダムな文字列を検出する
- 21. Numpy NaNを文字列リストの文字列に置き換えます。
- 22. c#文字列の置換
- 23. C++の文字列置換
- 24. C#モデルの配列の文字列を置き換えます
- 25. ベクトルに格納された文字列を文字に置き換えて文字を置き換えるC++
- 26. 文字列の文字列のリストを置換する(Objective-c 2.0)
- 27. 動作していない文字列を置き換える
- 28. Shopify文字列置き換え配列が機能しない
- 29. 文字列内である文字を別の文字に置き換えたり、逆の文字を文字列に置き換えたりします。
- 30. 文字列の値を置き換えるという単純な問題C#
リストをシャッフルし、文字列を1つずつ使用します。 –