在Groovy中从列表中提取对

在Groovy中从列表中提取对,groovy,Groovy,我需要从Groovy中的列表中提取周围元素对,以便断言通过: assert pairs([1, 2, 3, 4]) == [[1, 2], [2, 3], [3, 4]] def pairs(List list) { //... } 我目前的执行情况如下: def pairs(List list) { def result = [] for (int i = 0; i < list.size() - 1; i++) { result += [[lis

我需要从Groovy中的列表中提取周围元素对,以便断言通过:

assert pairs([1, 2, 3, 4]) == [[1, 2], [2, 3], [3, 4]]

def pairs(List list) {
  //...
}
我目前的执行情况如下:

def pairs(List list) {
    def result = []
    for (int i = 0; i < list.size() - 1; i++) {
        result += [[list[i], list[i + 1]]]
    }
    result
}
def对(列表){
def结果=[]
对于(int i=0;i
有没有其他功能性或常规方法解决该问题?

请参阅:

使用dropRight(1)可能更清楚一点('s建议):

Duh,没有看到keepreminder参数的重载:

如果keepreminder为false,则细分后iterable中的任何剩余元素都将被删除


也许是这样的

def pairs(list){
    def evenPairs = input.collate(2)
    def oddPairs = input.drop(1).collate(2, false)
    (evenPairs + oddPairs​)​.sort()​
}
如果这是一种交替合并数组的方法(或者顺序无关紧要),那么就不需要那种难看的
排序

只需执行以下操作:

def pairs(List list) {
    list.collate(2, 1, false)
}
这意味着“将它们分成两组,每次沿输入列表滑动一个条目,并删除任何小于2的组”
你会得到预期的结果。。。不需要删除、合并或添加

这并不能通过我的断言,我只希望
[[1,2]、[2,3]、[3,4]]
很好!我只是想知道是否有一些更简单或可读的solution@Michal:您可以尝试使用inject或每个Withindex。每个都是副作用,因此没有真正的功能。您可以使用
dropRight(1)
而不是子序列
groovy:000> [1,2,3,4].collate(2, 1, false)
===> [[1, 2], [2, 3], [3, 4]]
def pairs(list){
    def evenPairs = input.collate(2)
    def oddPairs = input.drop(1).collate(2, false)
    (evenPairs + oddPairs​)​.sort()​
}
def pairs(List list) {
    list.collate(2, 1, false)
}