随机分布

时间:2012-08-01 10:45:41

标签: c#

我想知道如何创建一个随机类,将表中的数据随机分配到36个其他表而不重复,以及如何打印出这些表。 我是编程新手

1 个答案:

答案 0 :(得分:1)

忽略“表格”的混乱,随机分配X项的一般方法是:

  1. 将它们列入清单,
  2. 随机挑选一件物品
  3. 从列表中删除该项目
  4. 返回1),但仍有可用的物品
  5. 或代码(使用1-200中的数字列表作为要分发的数据)

    static Random random = new Random();
    public static void Main(string[] args)
    {
        var list = new List<int>(Enumerable.Range(1,200));
        while(list.Count>0)
        {
            var item = list[random.Next(0,list.Count)];
            list.Remove(item);
    
            // Do something with 'item'
        }
    }
    

    实例:http://rextester.com/WBOK18374

    但是,如果需要随机分配,您可以将所有项目放在Queue中,然后Dequeue将它们一次放入一个随机位置放置它们。< / p>

    在此示例中,再次使用数字1-200作为数据,使用36 List<int>作为目标,代码将类似于:

    var tables = new List<int>[36];
    for(var i=0;i<36;i++)
    {
        tables[i] = new List<int>();
    }
    
    var stack = new Queue<int>(Enumerable.Range(1,300));
    while(stack.Count>0)
    {
        var next = stack.Dequeue();
        var table = tables[random.Next(0,36)];
        table.Add(next);
    }
    

    实例:http://rextester.com/HBDWH46108

    最后,如果这是你正在谈论的SQL表(你没有标记它,你将它标记为C# - 因此上面的答案)那么你不应该有36个看起来相同的表。您应该有一个包含数据的表,当它被提取时,您可以随机化结果。或者,在插入时,您可以将分配随机化为任何内容。