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
“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非常感谢你的时间。你是个天才!!:)很高兴这有帮助。如果您觉得这个(或任何其他答案)解决了您的问题,请随意将相关答案标记为已接受。这让社区知道您的问题已经得到了令人满意的回答。非常感谢您抽出时间。你是个天才!!:)很高兴这有帮助。如果您觉得这个(或任何其他答案)解决了您的问题,请随意将相关答案标记为已接受。这让社区知道您的问题已得到满意的回答。