【问题标题】:Groovy get all elements in a list under certain indexGroovy 获取特定索引下列表中的所有元素
【发布时间】:2017-03-01 01:33:38
【问题描述】:

我想收集特定索引下特定数组列表中的所有元素。假设我有这个列表:

def names = ["David", "Arthur", "Tommy", "Jacob"]

我想打印索引为 2 下的所有名字,在这种情况下,将打印“David, Arthur”

现在我可以很容易地使用 for 循环,甚至可以使用 groovy 的 eachWithIndex()。问题是我不想跑遍所有元素,因为那效率不高。而不是那个,我想跑到一个特定的点。

在 groovy 中是否有任何方法可以做到这一点,因为我没有找到。

提前致谢!

【问题讨论】:

  • 在这种情况下,您可以考虑使用带有int 索引的普通for 循环而不是groovyfor (int i=0; i<2; i++)...

标签: list groovy elements


【解决方案1】:

由于您从索引 0 开始,take 方法可能是最简单的方法。

def names = ["David", "Arthur", "Tommy", "Jacob"]
assert ['David', 'Arthur'] == names.take(2)

【讨论】:

    【解决方案2】:

    给定列表

    def names = ["David", "Arthur", "Tommy", "Jacob"]
    

    您可以使用以下任何选项:

    assert [ "Tommy", "Jacob" ] == names[ 2..<4 ]
    assert [ "Tommy", "Jacob" ] == names[ 2..-1 ]
    assert [ "Tommy", "Jacob" ] == names.subList( 2, 4 )
    assert [ "Tommy", "Jacob" ] == names.drop( 2 )
    

    注意,这些方法中的每一个都会创建一个新的 List 实例,所以如果内存考虑很重要,那么使用例如跳过元素是有意义的。 eachWithIndex() 方法或类似方法

    【讨论】:

      【解决方案3】:

      使用Ranges:

      ​def names = ["David", "Arthur", "Tommy", "Jacob"]
      def idx = 2
      
      def sublist = names[0..idx-1]
      
      sublist.each { n ->
          println n
      }
      

      使用更多的语法糖:

      names[0..<idx]
      

      【讨论】:

        猜你喜欢
        • 2019-03-03
        • 1970-01-01
        • 2015-09-04
        • 2013-12-03
        • 2022-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多