如何从C#中的数组中获取随机值

时间:2013-01-12 20:54:25

标签: c# .net arrays random collections

  

可能重复:
  Access random item in list

我有一个带数字的数组,我想从这个数组中获取随机元素。例如:{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;

6 个答案:

答案 0 :(得分:18)

  

我使用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]);

答案 1 :(得分:16)

改组

int[] numbers = new [] {0, 1, 4, 6, 8, 2};
int[] shuffled = numbers.OrderBy(n => Guid.NewGuid()).ToArray();

答案 2 :(得分:2)

试试这个

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

而不是

int start2 = random.Next(0, caminohormiga.Length);

答案 3 :(得分:1)

您只需使用随机数作为数组的引用:

var arr1 = new[]{1,2,3,4,5,6}
var rndMember = arr1[random.Next(arr1.Length)];

答案 4 :(得分:1)

我在评论中注意到你不想重复,所以你希望这些数字像一副纸牌一样被“洗牌”。

我会使用List<>作为源项目,随机获取 推送到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());
}

答案 5 :(得分:0)

Console.Write(caminohormiga[start2]);