昨天,我问了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);
}
}
你能把我的林肯翻译成鲁比吗?Python?还有其他函数式编程语言吗?在
注意:请尽量不要使用太多的循环和条件-否则解决方案很简单。另外,我更希望看到一个解决方案,即不必生成一个比N大得多的数组,这样就可以删除重复项并将其缩减为N
我知道我有点挑剔,但我真的很想看到一些优雅的解决方案来解决这个问题。 谢谢!在
编辑:
为什么所有的反对票?在
最初,我的代码示例在Take()之后有Distinct(),正如许多人指出的,这可能会给我留下一个空列表。我改变了调用这些方法的顺序,以反映我最初的意思。在
道歉:
有人告诉我,这篇文章给人的印象很势利。我并不是想暗示LINQ比Ruby/Python更好,也不是说我的解决方案比其他任何人都好,我的目的只是学习如何在Ruby中实现这一点(在某些限制条件下)。如果我给人的印象是个混蛋,我很抱歉。在
这将在
0 — 99
范围内生成5个唯一值。xrange
对象根据请求生成值,因此没有内存用于未采样的值。在嗯。。。关于(Python):
在Ruby中:
更新:这里有一个稍微不同的方法: a=(0…100)。条目.排序依据{rand}[0…5]
编辑:
在Ruby 1.9中,您可以执行以下操作:
^{pr2}$相关问题 更多 >
编程相关推荐