Как мне пройти по списку и удалить элемент в groovy? - PullRequest
17 голосов
/ 29 октября 2010

Я пытаюсь выяснить, как удалить элемент из списка в groovy из цикла.

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

Ответы [ 4 ]

19 голосов
/ 29 октября 2010
list = [1, 2, 3, 4]
newList = list.findAll { it != 2 }

Должны ли вы дать вам все, кроме 2

Конечно, у вас может быть причина, по которой вам нужен цикл?

15 голосов
/ 29 октября 2010

Если вы хотите удалить элемент с index 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]
6 голосов
/ 26 сентября 2014

Как вы заявляете в своем комментарии, что вам конкретно не требуется цикл .... Если вы рады изменить свой первоначальный список, вы можете использовать removeAll:

// Remove all negative numbers
list = [1, 2, -4, 8]
list.removeAll { it < 0 }
4 голосов
/ 29 октября 2010

Я думаю, что вы можете сделать:

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)
}​

, но я не понимаю, почему вы хотите это сделатьэто так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...