我正在使用grails findAllBy()方法返回Position(s)列表。 Position有一个名为location的整数字段,范围从1到15.我需要在位置列表中找到空闲的最低位置。
例如,如果位置1,2和4处有位置,则算法应返回3.如果填充了位置1 - 4,则返回5.
是否有一些简单的groovy list / map函数来获得正确的数字?
由于
答案 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}
。