如何将项目添加到C#数组中,以便我每个项目中只有3个?

时间:2011-03-23 23:55:09

标签: c# arrays

我有一个长度为12的int数组[],我想随机填充0到3的数字,但我想确保正好有0,1,2和3中的三个在数组中。关于如何做到这一点的任何想法?

6 个答案:

答案 0 :(得分:5)

非随机填充然后随意播放:

int[] myArray = new int(12);
for (i = 0; i < 12; ++i)
{
    myArray[i] = i/3;
}

Random rnd = new Random();
for (i = 0; i < 12; ++i)
{
    //int swapWith = rnd.Next(12);
    // Corrected to avoid bias.  See comments.
    int swapWith = rnd.Next(i+1);
    int temp = myArray[i];
    myArray[i] = myArray[swapWith];
    myArray[swapWith] = temp;
}

答案 1 :(得分:2)

你可以从有序数组(例如0,0,0,1,1,1 ......等)开始,然后像洗牌一样进行随机播放。浏览每个索引并将内容与另一个随机内容交换。

答案 2 :(得分:1)

这里的其他几个答案建议简单地交换随机选择的元素。这不会产生真正随机的结果。请参阅此处了解详细原因以及更好的随机排序方式:http://www.codinghorror.com/blog/2007/12/the-danger-of-naivete.html

答案 3 :(得分:0)

填充数组然后随机播放数字。如何做洗牌你可以在这里找到:Randomize a List<T>

答案 4 :(得分:0)

Random rnd=new Random();
var array = new[] {0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3}
                           .OrderBy(i => rnd.Next() )
                           .ToArray();

答案 5 :(得分:0)

这还有一个方法......

        var rnd = new Random();
        var items = Enumerable.Repeat(Enumerable.Range(0, 4), 3).SelectMany(item => item).OrderBy(item => rnd.Next()).ToArray();