除了一些不好的选择,你的循环似乎很好。我想冒险NumOfRows
是不是正确计算。
表达式NumOfRows = (TotalTickets + (Columns - 1))/Columns;
应计算正确的行数。
另外,您应该使用属性版本Count
而不是Linq扩展方法,并使用IList<T>.RemoveAt()
或List<T>.RemoveAt
而不是Remove(TicketList[T])
。
使用Remove()
要求枚举列表以查找要删除的元素,该列表可能与您定位的索引不同。更不用说,当您已经知道要删除的正确索引时,您将扫描每次删除呼叫的列表的50%(平均)。
前面列出的功能方法似乎是矫枉过正。
我试图复制你的问题,假设使用中的各种变量的某些事实。该循环重复预期的次数。
static void TestMe()
{
List<object> TicketList = new List<object>();
for (int index = 0; index < 109; index++)
TicketList.Add(new object());
var rand = new Random();
int nColumns = 100;
int NumOfRows = (TicketList.Count + (nColumns - 1))/nColumns;
object[,] numbers;
int t;
numbers = new object[nColumns, NumOfRows];
for (int j = 0; j < NumOfRows; j++)
{
Console.WriteLine("OuterLoop");
for (int i = 0; i < nColumns; i++)
{
if (TicketList.Count > 0)
{
t = rand.Next(0, TicketList.Count - 1);
numbers[i, j] = TicketList[t];
TicketList.RemoveAt(t);
}
}
}
}
您看到的问题必须是您没有包括在样品中的问题的结果。
如何通过调试器逐步完成?或者添加一些'Trace'语句来看看它在做什么? –
要清楚,你的外循环只执行一次** ** –
显示'NumOfRows'的值。附注:最好先洗牌,然后再填充行... –