c# - 具有随机数但不重复的矩阵 4x4(C#)
问题描述
我想生成从 1 到 16 的随机数,但是一旦生成了该数字,我希望它不能在矩阵中再次生成。我找不到这样做的方法,所以感谢您的帮助!
解决方案
实现这一点的一个非常简单的方法是生成所有数字,将它们打乱,然后用它们填充矩阵。
Random rng = new Random(); // System.Random
List<(double random, int value)> values = new List<(double random, int value)>(); // list for shuffling
for ( int i = 0; i < 16; i++ ) {
values.Add( ( rng.NextDouble(), i + 1 ) ); // random position and the value
}
values.Sort( ( a, b ) => b.random - a.random ); // sort using the random position. Note : Sort is a System.Linq extension method
int[,] matrix = new int[4,4];
for ( int i = 0; i < values.length; i++ ) {
matrix[ i % 4, i / 4 ] = values[ i ].value; // populate the matrix
// i % 4 just loops i between 0 and 3
// i / 4 divides i by 4 and rounds DOWN, ie. increases by 1 each 4
}
推荐阅读
- python - 是否可以对所有 QDoubleSpinBoxes 仅设置 100% 的价值份额限制?
- rust - 在struct中写一个不变量的例子
- java - 未找到基本域的严格传输安全标头
- javascript - 错误:ER_BAD_FIELD_ERROR:“字段列表”中的未知列“标题”
- tcpdump - IMX6ULL 4G 下载卡顿问题
- php - 使用隐藏的多个复选框值更新 db 有时会失败
- reactjs - 在每次不触发 onSnapshot 侦听器的情况下更新一组文档
- visual-studio-code - 为什么在下载所有必要的扩展后 vs code 不工作?
- javascript - 基于key的多级对象遍历和打印值
- ios - Xcode UITableView 莫名其妙的行为