groovy简单的方法找到列表中的漏洞?

时间:2011-08-13 16:59:14

标签: grails groovy

我正在使用grails findAllBy()方法返回Position(s)列表。 Position有一个名为location的整数字段,范围从1到15.我需要在位置列表中找到空闲的最低位置。

例如,如果位置1,2和4处有位置,则算法应返回3.如果填充了位置1 - 4,则返回5.

是否有一些简单的groovy list / map函数来获得正确的数字?

由于

3 个答案:

答案 0 :(得分:7)

如果你的职位列表是(为了简洁而限制在5的mx):

def list = [ 1, 2, 4, 5 ]

而且你知道你最多有5个,你可以这样做:

(1..5).minus(list).min()

哪会给你3

答案 1 :(得分:2)

只是另一个选择,因为我原本以为他想知道列表中第一个未使用的插槽,说你有这个:

def list = ['a', 'b', null, 'd', 'e', null, 'g']

您可以通过以下方式轻松找到阵列中的第一个空插槽:

def firstOpen = list.findIndexOf{ !it } // or it == null if you need to avoid groovy truth

答案 2 :(得分:2)

蒂姆的方式有效,适用于小范围。如果您已经按位置排序了项目,则可以通过利用findResult

在O(n)中完成
def firstMissing = 0
println list.findResult { (it.location != ++firstMissing) ? firstMissing : null }

打印3

如果它们未排序,您可以修改数据库查询以对其进行排序,也可以在其中添加sort{it.location}