如何从数组中创建随机数

我正在做C#编码。 在我的编码中,我需要生成一个随机的数字列表。 通常,如果我们创建一个随机数,我们需要选择数字的范围。 但是对于我的情况,我需要从数组中创建一个随机数。 任何的想法? 我正在使用XAML和C#。

private void Submit_Click(object sender, RoutedEventArgs e) { int[] numbers = new int[5] {32, 67, 88, 13, 50}; Random rd = new Random(); //int myNo = rd.Next(numbers[])? } 

额外 :每次单击提交按钮,将选择随机数字[] 。 如何确保不重复该号码。 例如:第一次点击,myNo = 67; 第二次点击,myNo = 50; 第3次点击,myNo = 88; 第4次点击,myNo = 32; 第5次点击,myNo = 13.谢谢!

您可以创建一个随机数,表示数组中的索引。 从该随机索引访问数组元素,您将得到您的数字,因为数组中的所有数字似乎都是不同的。

 int[] numbers = new int[5] { 32, 67, 88, 13, 50 }; Random rd = new Random(); int randomIndex = rd.Next(0, 5); int randomNumber = numbers[randomIndex]; 

编辑:(感谢@Corak )您可以根据数组长度生成随机索引,这将使其动态化并适用于任何数组的长度。

 int randomIndex = rd.Next(0, numbers.Length); 

编辑2 🙁对于问题的其他部分)。

您需要在类级别维护一个唯一索引号列表。 所以你的代码将是这样的:

 Random rd = new Random(); //At class level List uniqueIndices = new List(); //At class level private void Submit_Click(object sender, RoutedEventArgs e) { int[] numbers = new int[5] {32, 67, 88, 13, 50}; int randomIndex = rd.Next(0, numbers.Length); while(list.Contains(randomIndex)) //check if the item exists in the list or not. { randomIndex = rd.Next(0, numbers.Length); } list.Add(randomInex); //...rest of your code. } 
 Random r = new Random(); int index = r.Next(0, 5); int randomNum = numbers[index]; 

这将为您提供0到4之间的随机数,可用于索引数组,然后从数组中提取随机值

这是一种参数化方式:

 randIndex = rd.Next(0, numbers.Length); int myNo = numbers[randIndex]; 

我会创建一个代表随机可枚举的类,然后使用扩展名methond First生成你应该在数组中使用的第一个索引。 它看起来像这样:

 class Program { static void Main(string[] args) { int[] numbers = new int[5] { 32, 67, 88, 13, 50 }; var randomEnumerable = new RandomEnumerable(0, numbers.Length); int i = 0; while (i < numbers.Length) { var nextIndex = randomEnumerable.First(); var number = numbers[nextIndex]; Console.WriteLine(number); i++; } Console.ReadLine(); } } class RandomEnumerable : IEnumerable { private readonly int _max; private readonly int _min; private Random _random; public RandomEnumerable(int min, int max) { _max = max; _min = min; _random = new Random(); } public IEnumerator GetEnumerator() { while (true) { yield return _random.Next(_min, _max); } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } 

只需像往常一样创建一个随机索引,并使用该值索引到数组中,而不是直接返回它。

您必须随机生成数组索引以从数组中获取随机数。

只需应用随机函数来生成数组索引范围之间的数字( 0, array.length - 1)

您可以创建一个随机数,然后使用mod运算符%by 5并将其用作数组的索引。

例如。 modRd = rd % 5; randomNumber = numbers[modRd];

这将从数组中创建一个随机且唯一的数字

  public class Shuffler { Random randomNumber; public Shuffler() { randomNumber = new Random(); } ///  /// Shuffling the elements of Array ///  ///  ///  public void Shuffle(IList array) { for (int n = array.Count; n > 1; ) { int k = randomNumber.Next(n); //returning random number less than the value of 'n' --n; //decrease radom number generation area by 1 //swap the last and selected values T temp = array[n]; array[n] = array[k]; array[k] = temp; } } } 

您可以创建一个包含所有值的字符串,然后获取它的哈希码。 然后可以使用该哈希码对随机种子进行种子处理。

使用HashCode方法使种子更依赖于数组的数据

  public static void Main() { int[] numbers = new int[5] { 32, 67, 88, 13, 50 }; StringBuilder valuesToBeHashed = new StringBuilder(); for (int i = 0; i < numbers.Length; i++) { valuesToBeHashed.Append(numbers[i] + ","); } Random rd = new Random(valuesToBeHashed.GetHashCode()); Console.WriteLine("Hashcode of Array : {0} ",valuesToBeHashed.GetHashCode()); Console.WriteLine("Random generated based on hashcode : {0}", rd.Next()); }