如何在列表中循环并删除groovy中的项目?

时间:2010-10-28 20:02:41

标签: groovy

我正在试图弄清楚如何从循环内的groovy列表中删除项目。

static main(args) {
   def list1 = [1, 2, 3, 4]
   for(num in list1){
   if(num == 2)
      list1.remove(num)
   }
   println(list1)
}

4 个答案:

答案 0 :(得分:19)

list = [1, 2, 3, 4]
newList = list.findAll { it != 2 }

应该给你除了2

之外的其他所有人

当然你可能有理由要求循环?

答案 1 :(得分:15)

如果要删除带有索引 2的项目,可以执行

list = [1,2,3,4]
list.remove(2)
assert list == [1,2,4]

// or with a loop
list = [1,2,3,4]
i = list.iterator()
2.times {
    i.next()
}
i.remove()
assert list == [1,2,4]

如果你想用 2删除(第一个)项目,你可以

list = [1,2,3,4]
list.remove(list.indexOf(2))
assert list == [1,3,4]

// or with a loop
list = [1,2,3,4]
i = list.iterator()
while (i.hasNext()) {
    if (i.next() == 2) {
        i.remove()
        break
    }
}
assert list == [1,3,4]

答案 2 :(得分:6)

正如您在评论中指出的那样,您没有特别要求循环....如果您乐意修改原始列表,可以使用removeAll

// Remove all negative numbers
list = [1, 2, -4, 8]
list.removeAll { it < 0 }

答案 3 :(得分:4)

我认为你可以做到:

list - 2;

...或

list.remove(2)

不需要循环。

如果你想使用一个循环,我想你可以看看使用迭代器来实际删除该项。

import java.util.Iterator;

static main(args) {   def list1 = [1, 2, 3, 4]
   Iterator i = list1.iterator();
   while (i.hasNext()) {
      n = i.next();
      if (n == 2) i.remove();
   }
   println(list1)
}​

但我不明白你为什么要这样做。