代码之家  ›  专栏  ›  技术社区  ›  ScArcher2

如何遍历列表并删除groovy中的项?

  •  17
  • ScArcher2  · 技术社区  · 14 年前

    我正试图找出如何在循环中从groovy的列表中移除一个项。

    static main(args) {
       def list1 = [1, 2, 3, 4]
       for(num in list1){
       if(num == 2)
          list1.remove(num)
       }
       println(list1)
    }
    
    4 回复  |  直到 14 年前
        1
  •  15
  •   ataylor    14 年前

    如果要使用删除项目 指数 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
  •  19
  •   tim_yates    14 年前
    list = [1, 2, 3, 4]
    newList = list.findAll { it != 2 }
    

    你当然有理由要求循环?

        3
  •  7
  •   vegemite4me    10 年前

    正如你在评论中所说,你并不特别需要一个循环。。。。如果您愿意修改原始列表,可以使用 removeAll

    // Remove all negative numbers
    list = [1, 2, -4, 8]
    list.removeAll { it < 0 }
    
        4
  •  4
  •   Jonathan Holloway    14 年前

    我想你可以:

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

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