Java Groovy复杂数组列表迭代

Java Groovy复杂数组列表迭代,java,groovy,iteration,complexity-theory,Java,Groovy,Iteration,Complexity Theory,我正在迭代一个具有以下输出的数组列表: 理查德 柯林斯 杜卡迪 五十 伦敦 巴特 进程已完成,退出代码为0 所有这些元素都在我的objet“Results” 我的代码: def list = results[0] list.eachWithIndex { val, idx -> println "${idx}. ${val}" } 通过这个迭代,我将同时得到索引和元素 通过示例,我需要知道是否可以在数组列表中进行迭代,同时以文字形式转换索引 A

我正在迭代一个具有以下输出的数组列表:

  • 理查德
  • 柯林斯
  • 杜卡迪
  • 五十
  • 伦敦
  • 巴特
  • 进程已完成,退出代码为0

    所有这些元素都在我的objet
    “Results”

    我的代码:

    def list = results[0]
        list.eachWithIndex { val, idx ->
            println "${idx}. ${val}" }
    
    通过这个迭代,我将同时得到索引和元素

    通过示例,我需要知道是否可以在数组列表中进行迭代,同时以文字形式转换索引

    A. Richard
    B. Collins
    C. Ducati
    D. 50
    E. London
    F. Barten
    
    我正在实现和自动化,系统无法从元素中捕获索引。也许可以用文字来代替它们


    谢谢你们

    您可以尝试类似以下内容

    branches = ['Richard', 'Collins', 'Ducati', '50', 'London', 'Barten']
    
    char a = 'A'
    branches.eachWithIndex { val, idx ->
      println "${(idx + (a as int)) as char}. ${val}" 
    }
    

    因此,您可以将字符转换为整数(ASCII),然后添加索引值,然后将其重新转换为字符。根据列表中的值的数量,您可以创建一个“更好”的intToString()方法,但您应该在示例中了解到这一点

    branches = ['Richard', 'Collins', 'Ducati', '50', 'London', 'Barten']
    
    char a = 'A'
    branches.eachWithIndex { val, idx ->
      println "${(idx + (a as int)) as char}. ${val}" 
    }
    

    因此,您可以将字符转换为整数(ASCII),然后添加索引值,然后将其重新转换为字符。根据列表中的值的数量,您可以创建一个“更好”的intToString()方法,但是如果您想涵盖一个字母索引值用尽的情况,您应该以另一种方式在示例中获得此想法:

    def values   = ['Richard', 'Collins', 'Ducati', '50', 'London', 'Barten']
    def alphabet = ('a'..'c')
    
    values.indexed().each { i, v -> 
      def index = encode(i, alphabet)
      println "${index}. $v"
    }
    
    String encode(index, alphabet) {  
      def result = new StringBuilder()
      def s = alphabet.size()
      index += s // remove if we are ok with one letter indicies
    
      while (index >= 0) {
        result.insert(0, alphabet[index % s as int])
        index = (index / s as long) - 1
      }
      
      result
    }
    
    运行时,它会打印:

    ─➤ groovy solution.groovy
    aa. Richard
    ab. Collins
    ac. Ducati
    ba. 50
    bb. London
    bc. Barten
    
    其中,标识的字母表可通过
    ('a'..'z')
    范围语法进行配置

    例如,对于大写字母和数字的组合,您可以:

    def alphabet = ('A'..'Z') + ('0'..'9')
    
    这将产生:

    ─➤ groovy solution.groovy
    AA. Richard
    AB. Collins
    AC. Ducati
    AD. 50
    AE. London
    AF. Barten
    
    其中索引值将滚动到字母
    Z
    后的数字


    这样,即使对于
    values
    集合中的大量输入项,也永远不会“用完”索引值。
    encode
    方法只会连续生成更长的索引值,输入的整数值越大。要减少大输入整数的索引值长度,您可以使用更长的字母表。

    另一种方法是,如果您想涵盖一个字母索引值不足的情况:

    def values   = ['Richard', 'Collins', 'Ducati', '50', 'London', 'Barten']
    def alphabet = ('a'..'c')
    
    values.indexed().each { i, v -> 
      def index = encode(i, alphabet)
      println "${index}. $v"
    }
    
    String encode(index, alphabet) {  
      def result = new StringBuilder()
      def s = alphabet.size()
      index += s // remove if we are ok with one letter indicies
    
      while (index >= 0) {
        result.insert(0, alphabet[index % s as int])
        index = (index / s as long) - 1
      }
      
      result
    }
    
    运行时,它会打印:

    ─➤ groovy solution.groovy
    aa. Richard
    ab. Collins
    ac. Ducati
    ba. 50
    bb. London
    bc. Barten
    
    其中,标识的字母表可通过
    ('a'..'z')
    范围语法进行配置

    例如,对于大写字母和数字的组合,您可以:

    def alphabet = ('A'..'Z') + ('0'..'9')
    
    这将产生:

    ─➤ groovy solution.groovy
    AA. Richard
    AB. Collins
    AC. Ducati
    AD. 50
    AE. London
    AF. Barten
    
    其中索引值将滚动到字母
    Z
    后的数字


    这样,即使对于
    values
    集合中的大量输入项,也永远不会“用完”索引值。
    encode
    方法只会连续生成更长的索引值,输入的整数值越大。要减少大输入整数的索引值长度,您可以使用更长的字母表。

    这应该是可行的,您尝试过什么?用完单个字母后,您希望使用什么?“Excel风格”?@cfrick你好,亲爱的!!!请看下面的解决方案:P-Boulis应该是可行的,您尝试过什么?一旦用完单个字母,您希望使用什么?“Excel风格”?@cfrick你好,亲爱的!!!请参阅下面的解决方案:我认为
    ${(idx+(a作为int))as char}
    可能是
    ${(idx+a)as char}
    。我不确定
    as int
    是否有作用。@Edu非常感谢您抽出时间。你是个明星!谢谢@jeff Scott BrownI认为
    ${(idx+(a as int))as char}
    可能是
    ${(idx+a)as char}
    。我不确定
    as int
    是否有作用。@Edu非常感谢您抽出时间。你是个明星!谢谢你@jeff Scott Brown非常感谢你的时间。你是个天才!!:)很高兴这有帮助。如果您觉得这个(或任何其他答案)解决了您的问题,请随意将相关答案标记为已接受。这让社区知道您的问题已经得到了令人满意的回答。非常感谢您抽出时间。你是个天才!!:)很高兴这有帮助。如果您觉得这个(或任何其他答案)解决了您的问题,请随意将相关答案标记为已接受。这让社区知道您的问题已得到满意的回答。