CSharp - 在不同的行/列中,如何用唯一的随机数填充 array

  显示原文与译文双语对照的内容
0 0

我已经四处找了很多,但似乎找不到令人满意的答案。 我想用唯一的数字填充一个 5 x5. in列 1只能是 1到 -5 between column number number -30 so到column列 5之间的数字。 我尝试了一些东西,但是没有一个工作,我看不到一种方法来填充我的规格。 我看到的任何地方都只是预先填充的数组的例子,或者者代码为我先进的代码。

在以前我创建了一个程序,用数字创建一个规则的array,然后用 fisher/yates算法进行洗牌。 这是我应该继续使用还是应该从头开始的东西? enter code here

 static void Main(string[] args)
{
 string choise ="";
 while (choise!="q" && choise!="Q")
 {
 Console.Clear();
 Console.WriteLine("[1] for a random row of numbers! n[2] to start the game! 
 n[Q] to quit! nPress enter after your selection.");
 choise = Console.ReadLine();
 if (choise =="1")
 {
 RandomNum.randomTal();
 }
 (another class)
 static Random rnd = new Random();
 public static void Shuffle<T>(T[] array)
 {
 Console.Clear();
 for (int i = 0; i <array.Length; i++)
 {
 int r = i + (int)(rnd.NextDouble() * (array.Length - i));
 T t = array[r];
 array[r] = array[i];
 array[i] = t;
 }
 }
(and another class)
class RandomNum
 {
 public static void randomTal()
 {
 int[] sifferArray = Enumerable.Range(1, 56).ToArray();
 shuffle.Shuffle(sifferArray);
 foreach (var item in sifferArray)
 {
 Console.WriteLine(item);
 }
 Console.WriteLine("Press any key to go back.");
 Console.ReadKey();
 }
时间:原作者:6个回答

0 0
static void Main(string[] args)
 {
 var bingoCard = getBingoCard();
 int colNum = 1;
 foreach (var col in bingoCard)
 {
 Console.Write("col" + colNum.ToString() +"");
 foreach (var item in col)
 {
 Console.Write(item +"");
 }
 Console.WriteLine();
 colNum++;
 }
 Console.WriteLine();
 for (int x = 0; x <5; x++)
 {
 for (int y = 0; y <5; y++)
 {
 Console.Write(bingoCard[y][x].ToString() + (bingoCard[y][x]> 9?"" :""));
 }
 Console.WriteLine();
 }
 Console.ReadLine();
 }
 public static int[][] getBingoCard()
 {
 var randGen = new Random();
 var bingoCard = new int[][]{
 new int[5],
 new int[5],
 new int[5],
 new int[5],
 new int[5]
 };
 for (int y = 0; y <5; y++)
 {
 for (int x = 0; x <5; x++)
 {
 var possibleNumber = randGen.Next((15 * y) + 1, ((y + 1) * 15));
 while (bingoCard[y].Any(num => num == possibleNumber))
 {
 possibleNumber = randGen.Next((15 * y) + 1, ((y + 1) * 15));
 }
 bingoCard[y][x] = possibleNumber;
 }
 }
 return bingoCard;
 }
原作者:
0 0

当我需要这样做的时候,我使用类似这样的东西:

 private int[] generatePermutation(int size, int seed) 
 {
 var permutation = new int[size];
 Rnd random = new Rnd(seed);
 List<int> permList = new List<int>(size);
 for (int i = 0; i <size; i++) permList.Add(i);
 for (int i = 0; i <size; i++)
 {
 int index = random.Next(0, permList.Count);
 permutation[i] = permList[index];
 permList.RemoveAt(index);
 }
 return permutation;
 }
原作者:
0 0

如果具有与单元格对应的嵌入 2d 整数 array的类 BingoBoard,则可以生成类似于这样的单元格的随机模式:

public class BingoBoard
{
 public const int BoardDimension = 5;
 readonly int[,] board = new int[BoardDimension, BoardDimension];
 public BingoBoard()
 {
//In column 1 it can only be a number between 1-15 and in column 2 number 16-30 and so on up until column 5 with a number between 61-75.
 for (int iRow = 0; iRow <board.GetLength(0); iRow++)
 {
 var col = Enumerable.Range(iRow * 3 * board.GetLength(1) + 1, 3 * board.GetLength(1)).Shuffle().Take(board.GetLength(1)).ToArray();
 for (int iCol = 0; iCol <board.GetLength(1); iCol++)
 board[iRow, iCol] = col[iCol];
 }
 }
 public int[,] Board
 {
 get
 {
 return board;
 }
 }
}
public static class RandomProvider
{
//Adapted from http://csharpindepth.com/Articles/Chapter12/Random.aspx
 private static int seed = Environment.TickCount;
 [ThreadStatic]
 static Random random;
 public static Random GetThreadRandom()
 {
 if (random == null)
 random = new Random(Interlocked.Increment(ref seed));
 return random;
 }
}
public class FisherYatesShuffle 
{
 public void ShuffleInPlace<T>(T[] array)
 {
 var randomizer = RandomProvider.GetThreadRandom();
//http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm, second version.
 for (int i = 0; i <array.Length; i++)
 {
//http://msdn.microsoft.com/en-us/library/2dx6wyd4%28v=vs.110%29.aspx
 var j = randomizer.Next(i, array.Length);//i = inclusive lower bound; array.Length = The exclusive upper bound of the random number returned
 array.Swap(i, j);
 }
 }
}
public static class ListExtensions
{
 public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> list)
 {
 var scrambled = list.ToArray();
 new FisherYatesShuffle().ShuffleInPlace(scrambled);
 return scrambled;
 }
 public static void Swap<T>(this T[] list, int i, int j)
 {
 if (list == null)
 throw new ArgumentNullException();
 if (i!= j)
 {
 T temp = list[i];
 list[i] = list[j];
 list[j] = temp;
 }
 }
}
原作者:
...