如何在Groovy中的循环中从map中分配多个值

axr492tv  于 2023-05-16  发布在  其他
关注(0)|答案(2)|浏览(158)

我在groovy中有一个map,其中每个项都有多个值,我需要在循环中使用这些值。值的数量是固定的,因此可以存储在列表/数组中,元组-无关紧要。
例如,我试过:

def routemap = [ One: ['Berlin','Hamburg'], Two: ['London','Paris'], Three: ['Rome','Barcelona']]

routemap.each { route, startend ->
    println "Route: $route"
    println "Start: $startend[0] End: $startend[1]"
}

这不会提供所需的结果,列表索引不起作用。

Route: One
Start: [Berlin, Hamburg][0] End: [Berlin, Hamburg][1]
Route: Two
Start: [London, Paris][0] End: [London, Paris][1]
Route: Three
Start: [Rome, Barcelona][0] End: [Rome, Barcelona][1]

我也想知道是否有一个更好的,更优雅的方式来做到这一点?有没有一种方法可以在循环中分配两个值(或者像Python中那样的一对或一个元组),而不是“startend”?

gr8qqesn

gr8qqesn1#

您应该将$startend[index]放在花括号中,就像${startend[0]}一样。所以你的代码看起来像这样:

def routemap = [ One: ['Berlin','Hamburg'], Two: ['London','Paris'], Three: ['Rome','Barcelona']]

routemap.each { route, startend ->
    println "Route: $route"
    println "Start: ${startend[0]} End: ${startend[1]}" // here is the change
}
wlzqhblo

wlzqhblo2#

你可以直接对startend参数使用多重赋值:

def routemap = [ One: ['Berlin','Hamburg'], Two: ['London','Paris'], Three: ['Rome','Barcelona']]

routemap.each{ route, startend ->
  def ( start, end ) = startend
  println "Route: $route"
  println "Start: $start End: $end"
}

印刷品

Route: One
Start: Berlin End: Hamburg
Route: Two
Start: London End: Paris
Route: Three
Start: Rome End: Barcelona

相关问题