【问题标题】:Groovy: Iterating a listGroovy:迭代列表
【发布时间】:2016-09-15 07:32:06
【问题描述】:

我试图迭代一个列表,在谷歌搜索后,我找到了一个如下解决方案:

value([0,1,2,3,4,5,6].sort{new Random()}?.take(1)[0])

这部分我没看懂: 排序{新随机()}

有人能解释一下吗? 以及take方法属于哪个类?

【问题讨论】:

  • 在我看来Random 类没有得到有效使用。该类本身不是Comparable,Groovy 也没有为该类定义任何默认强制转换(除了已经为Object 定义的强制转换)。所以排序值受 Groovy 生成的比较器的支配,它没有其他方法来比较对象,最终会比较它们的哈希码。这肯定会确保结果中的一些随机性,但不会比排序闭包是{new Object()} 更重要。
  • 无论如何,最初的程序员可能打算对列表进行洗牌,他们的代码就是这样做的,但效率很低。改组也是不可重现的,如果最初的程序员倾向于这样做,这将是使用 Random 类的特性的一个优势。

标签: list sorting random groovy


【解决方案1】:

sort 收到一个闭包以确定您希望的顺序。在本例中,它进行随机排序。

take 来自 Iterable 并返回前 n 个元素。

【讨论】:

  • 能否请您稍微解释一下如何在排序方法中使用此 clouser?我的意思是如何使用 Random 对象对整数进行排序?
  • 不是排序,是随机洗牌
  • @tim_yates:好的。你能解释一下如何使用 Random 类对象来洗牌吗?我的意思是这个clouser是如何被调用的?
猜你喜欢
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 2014-05-29
  • 2017-09-02
相关资源
最近更新 更多