昨天,我问了这个问题,但从来没有真正得到我真正满意的答案。我真的很想知道如何使用诸如 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(),正如许多人指出的那样,这可能会给我留下一个空列表。我已经更改了调用这些方法的顺序,以反映我最初的意思。
道歉:
有人告诉我这篇文章相当势利。我并不是要暗示 LINQ 比 Ruby/Python 更好。或者我的解决方案比其他人的解决方案要好得多。我的目的只是学习如何在 Ruby 中做到这一点(有一定的限制)。如果我被认为是个混蛋,我很抱歉。