C#/我通过随机选择下一个单元格来填充字符串数组中的 DataGridView,并且不想再次选择使用过的单元格
Posted
技术标签:
【中文标题】C#/我通过随机选择下一个单元格来填充字符串数组中的 DataGridView,并且不想再次选择使用过的单元格【英文标题】:C# / I fill up a DataGridView from a string array by picking the next cell randomly and do not want to pick used cell again 【发布时间】:2021-10-12 10:50:21 【问题描述】:我有一个字符串数组,必须通过随机选择下一个单元格来填充 DataGridView。我想使用数组的所有项目,但避免选择我已经填满的单元格。如果有空单元格也可以,但我必须使用所有项目。
我尝试了什么:
foreach (var item in myarray)
y = random.Next(0, 5);
x = random.Next(0, t.Rows.Count);
t.CurrentCell = t[y, x];
for (int j = 0; j < t.Columns.Count; j++)
for (int k = 0; k < t.Rows.Count; k++)
if (t.Rows[k].Cells[j].Value == null)
t.CurrentCell.Value = item;
非常感谢!
【问题讨论】:
这个问题几乎肯定会被锁定,但这是答案——构造一个包含所有可能单元格位置的列表,然后遍历字符串数组一次,从位置列表中随机选择目标单元格,然后删除它。例如,位置列表可以是 (x,y) 元组的列表。 【参考方案1】:您可以从左到右为每个单元格分配一个数字,例如对于 4x4 矩阵,每个单元格将从 0 到 15 编号。之后,您可以打乱 0...15
整数数组并通过分配一个字符串来迭代该数组到相应的单元格,您可以通过将数组 (cellNumber) 中的数字转换回如下坐标来获得该单元格:
(cellNumber / rowsCount, cellNumber % columnsCount)
.
考虑以下源代码:
private static Random rng = new Random();
public static void Shuffle<T>(this IList<T> list)
int n = list.Count;
while (n > 1)
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
public static (int x, int y) GetCoordinates(int cellNumber, int rowsCount, int columnsCount)
return (cellNumber / rowsCount, cellNumber % columnsCount);
public static void Main()
var rowsCount = 4;
var columnsCount = 4;
var cellNumbers = Enumerable.Range(0,rowsCount*columnsCount - 1).ToList();
cellNumbers.Shuffle();
foreach (var cellCoordinates in cellNumbers.Select(x => GetCoordinates(x, rowsCount, columnsCount)))
Console.WriteLine($"cellCoordinates.x,cellCoordinates.y");
【讨论】:
以上是关于C#/我通过随机选择下一个单元格来填充字符串数组中的 DataGridView,并且不想再次选择使用过的单元格的主要内容,如果未能解决你的问题,请参考以下文章
如何通过仅选择表正下方行中的任何单元格来触发宏(ListObject)
使用 NSMutableDictionary 和数组填充单元格的 TableView
UITableView 单元格未填充 CloudKit 数据