Groovy过滤二维数组

时间:2016-01-13 09:43:22

标签: arrays groovy findall

​def a = [[6, 4], [8, 6], [5, 3]]

a.findAll {
   it.findAll {
      it != 4 && it != 6 
   }
}​​

所以我编写了这个伪代码,所以我不需要编写复杂的代码。所以我想从数组中删除所有4个,但如果我只写it != 4 然后它不会删除它,如果我写了两个数字,就像我现在写的那样!= 4&&它!= 6然后删除它。我应该以某种方式使用它吗?我想要这个数组

def a = [[6, 4], [8, 6], [5, 3]]

例如,从中移除所有4号。

2 个答案:

答案 0 :(得分:4)

删除

内的4子列表

使用in语法检查子列表内部。因此,您的代码可以重写为:

def a = [[6,4],[8,6],[5,3]] 
assert  [[8, 6], [5, 3]] == a.findAll { !(4 in it) }

从每个子列表中删除4

def a = [[6,4],[8,6],[5,3]] 
// Modify list in place, to return a new list use collect
assert  [[6], [8, 6], [5, 3]] == a.each{ it.removeAll { it == 4 } }

答案 1 :(得分:2)

由于您需要修改集合,因此需要使用collect代替findAll

def a =  [
    [6, 4],
    [8, 6],
    [5, 3],
  ]

assert a.collect { l -> l.findAll { it != 4 } } == [[6], [8, 6], [5, 3]]