昨天,我问了this问题,但从未真正得到我真正满意的答案。我真的很想知道如何使用诸如Ruby之类的功能语言生成N个唯一随机数的列表,而不必在样式上极为必要。
因为没有看到我真正喜欢的东西,所以我在LINQ中写了我想要的解决方案:
static void Main(string[] args)
{
var temp = from q in GetRandomNumbers(100).Distinct().Take(5) select q;
}
private static IEnumerable GetRandomNumbers(int max)
{
Random r = new Random();
while (true)
{
yield return r.Next(max);
}
}
您可以将我的LINQ转换为Ruby吗? Python?还有其他函数式编程语言吗?注意:请尝试不要使用过多的循环和条件-否则解决方案将是微不足道的。另外,我更希望看到一个解决方案,其中您不必生成比N大得多的数组,因此您可以删除重复项并将其修整为N。
我知道我很挑剔,但是我真的很想看到一些解决此问题的优雅方法。
谢谢!
编辑:
为什么所有的反对票?
最初,我的代码示例在Take()之后有Distinct(),正如许多人指出的那样,这可能使我留下一个空列表。我已经更改了调用这些方法的顺序,以首先反射(reflect)出我的意思。
道歉:
有人告诉我这篇文章相当势利。我并不是要暗示LINQ比Ruby/Python更好。或者说我的解决方案比其他所有人的解决方案都要好。我的目的只是学习如何在Ruby中(有一定限制)进行此操作。对不起,如果我遇到一个 SCSS 。
最佳答案
在Ruby中:
a = (0..100).entries.sort_by {rand}.slice! 0, 5
更新:这是稍微不同的方式:
a =(0 ... 100).entries.sort_by {rand} [0 ... 5]
编辑:
在Ruby 1.9中,您可以执行以下操作:
Array(0..100).sample(5)