当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《我如何用Ruby/Python编写这个?或者,你能将我的LINQ翻译成Ruby/Python吗?》经验,为你挑选了2个好方法。

昨天,我问了这个问题,从来没有得到过我真正满意的答案.我真的想知道如何使用诸如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吗?蟒蛇?任何其他函数式编程语言?

注意:请尽量不要使用太多的循环和条件 - 否则解决方案是微不足道的.此外,我宁愿看到一个解决方案,你不必生成比N大得多的数组,这样你就可以删除重复项并将其修剪为N.

我知道我很挑剔,但我真的很想看到这个问题的优雅解决方案.谢谢!

编辑:
为什么所有的downvotes?

最初我的代码示例在Take()之后有Distinct(),正如许多人指出的那样,它可能会留下一个空列表.我已经改变了调用这些方法的顺序,以反映我的意思.

道歉:
我被告知这篇文章是相当势利的.我并不是想暗示LINQ比Ruby/Python更好; 或者说我的解决方案比其他人好得多.我的目的只是学习如何在Ruby中执行此操作(具有某些约束).如果我是一个混蛋,我很抱歉.



1> 小智..:
>>> import random
>>> print random.sample(xrange(100), 5)
[61, 54, 91, 72, 85]

这应该在该范围内产生5个唯一值0 — 99.该xrange对象按请求生成值,因此没有内存用于未采样的值.


xrange()确实不使用生成器.这是一个假名单.生成器不是序列,也不能被索引,因此random.sample()如果是一个则会失败.

2> Michael Dear..:

在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) 

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有