如何用Ruby/Python编写这个呢?或者,你能把我的LINQ翻译成Ruby/Python吗?

2024-10-01 02:24:46 发布

您现在位置:Python中文网/ 问答频道 /正文

昨天,我问了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中实现这一点(在某些限制条件下)。如果我给人的印象是个混蛋,我很抱歉。在


Tags: 函数答案列表staticrandom解决方案thislinq
3条回答
>>> import random
>>> print random.sample(xrange(100), 5)
[61, 54, 91, 72, 85]

这将在0 — 99范围内生成5个唯一值。xrange对象根据请求生成值,因此没有内存用于未采样的值。在

嗯。。。关于(Python):

s = set()
while len(s) <= N: s.update((random.random(),))

在Ruby中:

a = (0..100).entries.sort_by {rand}.slice! 0, 5

更新:这里有一个稍微不同的方法: a=(0…100)。条目.排序依据{rand}[0…5]

编辑:

在Ruby 1.9中,您可以执行以下操作:

^{pr2}$

相关问题 更多 >