这是我试图使用的Groovy中的过滤器的实现。
def filter(list, p) {
if (list.size() == 0) { return list }
if (p(list.head())) {
[] + list.head() + filter(list.tail(), p)
} else {
filter(list.tail(), p)
}
}
这是我尝试使用的快速排序算法的实现。
def qSort(list) {
if ( list.size() <= 1 ) {
return list
} else {
def pivot = list[(int)list.size() / 2]
def sorted = []
sorted += qSort(filter(list, { it < pivot}))
sorted += qSort(filter(list, { it == pivot}))
sorted += qSort(filter(list, { it > pivot }))
}
}
这是我试图排序的列表,相对任意。
def list = [5, 3, 2, 1, 8, 4, 5, 8, 23, 4, 6, 8, 3, 23, 76, 8, 9, 2, 2, 1, 1, 2]
我收到此错误:
Exception in thread "main" java.lang.StackOverflowError
at java.lang.Math.getExponent(Math.java:1310)
at java.lang.StrictMath.floorOrCeil(StrictMath.java:355)
at java.lang.StrictMath.ceil(StrictMath.java:321)
at java.lang.Math.ceil(Math.java:405)
at java.math.BigDecimal.divide(BigDecimal.java:1608)
at org.codehaus.groovy.runtime.typehandling.BigDecimalMath.divideImpl(BigDecimalMath.java:62)
at org.codehaus.groovy.runtime.typehandling.IntegerMath.divideImpl(IntegerMath.java:46)
at org.codehaus.groovy.runtime.dgmimpl.NumberNumberDiv$NumberNumber.invoke(NumberNumberDiv.java:320)
答案 0 :(得分:1)
当你有一个n
个数字列表(其中n > 1
)都等于数据透视表时,它会陷入困境。
如果你改变:
if ( list.size() <= 1 ) {
要:
if ( list.unique(false).size() <= 1 ) {
它会起作用......虽然
可能会有一种“hacky feeling”的解决方案