28

重複の可能性:
リスト内のランダムなアイテムにアクセスする

数字の配列があり、この配列からランダムな要素を取得したいと思います。例:{0,1,4,6,8,2}。6を選択し、この数値を別の配列に入れたいと思います。新しい配列の値は{6、....}になります。

random.next(0、array.length)を使用しますが、これにより長さの乱数が得られ、ランダムな配列番号が必要になります。

for (int i = 0; i < caminohormiga.Length; i++ )
{
    if (caminohormiga[i] == 0)
    {
        continue;
    }

    for (int j = 0; j < caminohormiga.Length; j++)
    {
        if (caminohormiga[j] == caminohormiga[i] && i != j)
        {
            caminohormiga[j] = 0;
        }
    }
}

for (int i = 0; i < caminohormiga.Length; i++)
{
   int start2 = random.Next(0, caminohormiga.Length);
   Console.Write(start2);
}

return caminohormiga;
4

6 に答える 6

41

random.next(0、array.length)を使用しますが、これにより長さの乱数が得られ、ランダムな配列番号が必要になります。

からの戻り値random.next(0, array.length)をインデックスとして使用して、から値を取得します。array

 Random random = new Random();
 int start2 = random.Next(0, caminohormiga.Length);
 Console.Write(caminohormiga[start2]);
于 2013-01-12T20:56:59.873 に答える
30

シャッフルするには

int[] numbers = new [] {0, 1, 4, 6, 8, 2};
int[] shuffled = numbers.OrderBy(n => Guid.NewGuid()).ToArray();
于 2013-01-12T21:02:47.893 に答える
5

配列への参照として乱数を使用する必要があります。

var arr1 = new[]{1,2,3,4,5,6}
var rndMember = arr1[random.Next(arr1.Length)];
于 2013-01-12T20:57:06.820 に答える
3

コメントで、繰り返しを望まないことに気づきました。そのため、トランプのように数字を「シャッフル」する必要があります。

List<>ソースアイテムにaを使用し、それらをランダムに取得してaにプッシュStack<>し、数字のデッキを作成します。

次に例を示します。

private static Stack<T> CreateShuffledDeck<T>(IEnumerable<T> values)
{
  var rand = new Random();

  var list = new List<T>(values);
  var stack = new Stack<T>();

  while(list.Count > 0)
  {
    // Get the next item at random.
    var index = rand.Next(0, list.Count);
    var item = list[index];

    // Remove the item from the list and push it to the top of the deck.
    list.RemoveAt(index);
    stack.Push(item);
  }

  return stack;
}

それで:

var numbers = new int[] {0, 1, 4, 6, 8, 2};
var deck = CreateShuffledDeck(numbers);

while(deck.Count > 0)
{
  var number = deck.Pop();
  Console.WriteLine(number.ToString());
}
于 2013-01-12T21:56:52.517 に答える
3

このようにしてみてください

int start2 = caminohormiga[ran.Next(0, caminohormiga.Length)];

それ以外の

int start2 = random.Next(0, caminohormiga.Length);
于 2013-01-12T21:01:12.287 に答える
0
Console.Write(caminohormiga[start2]);
于 2013-01-12T20:57:23.043 に答える