有一个c#等价的pythons itertools.combinations_with_replacement

时间:2016-08-02 12:05:05

标签: c# itertools

我正在寻找所有可能的方法来滚动5个六面骰子。我知道在python中你可以使用itertools来做到这一点,c#中有什么东西可以达到同样的效果吗?

itertools.combinations_with_replacement(iterable, r)

for i in itertools.combinations_with_replacement(range(1, 6), 5)

https://docs.python.org/dev/library/itertools.html#itertools.combinations_with_replacement

范围1,6是骰子上的脸部数量,5是掷骰子的数量。想要生产所有7776种方式,你可以掷骰子。例如初始卷可能看起来像:

骰子1,骰子2,骰子3,骰子4,骰子5 = 1,2,3,4,5

2 个答案:

答案 0 :(得分:2)

这很容易 - 它基本上是cross join,范围为1-6 5倍。

var range = Enumerable.Range(1,6);
var result = from d1 in range
                     from d2 in range
                     from d3 in range
                     from d4 in range
                     from d5 in range
            select new { d1,d2,d3,d4,d5 };

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

答案 1 :(得分:-2)

3615建议的实施:

Random root = new Random();
List<int> results = new List<int>()
for (int i = 0; i < 5; i++)
{
    results.Add(root.Next(1, 6));
}

//results now contain the 5 dice throws