为迭代列表生成每个地图密钥的列表?

时间:2015-05-13 06:56:24

标签: groovy syntax

我有一张地图,我需要在groovy中为每个地图键插入生成的列表,因为我正在遍历列表!

代码:

def myMap = [:]
    anotherList.each{
    object -> //here i do some work to get two elements
    def element1 = ..
    def element2 = ..

    // so here i need to generate a list for the two elements with index 0 and 1
    myMap[obejct]= ['list', my list] 
    }
   return myMap

2 个答案:

答案 0 :(得分:1)

您可以使用[ key: value]表示法创建地图。由于您的值是两个元素的数组,您可以使用[element1,element2]表示法创建它,然后您可以使用<< operator将对象添加到地图中。

所以这个myMap << [ (object) : [element1,element2]]可以完成这项工作。

在您的代码中:

   def myMap = [:]
    anotherList.each{
    object -> //here i do some work to get two elements
    def element1 = ..
    def element2 = ..

    // so here i need to generate a list for the two elements with index 0 and 1
     myMap << [ (object) :  [element1,element2]]
    }
   return myMap

请注意,我使用(object)来评估密钥,因为如果直接使用object,则字面值将用作地图中的键而不是值。

希望这有帮助,

根据OP评论更新:

如果我很了解您的要求,您希望地图键是索引而不是值不是吗?为此,您可以使用eachWithIndex代替each,例如:

def myMap = [:]
  def anotherList = ['a','b','c','d']
    anotherList.eachWithIndex{ object,index -> //here i do some work to get two elements
    def element1 = object + 'z'
    def element2 = object + 'x'

    // so here i need to generate a list for the two elements with index 0 and 1
     myMap << [ (index) :  [element1,element2]]
    }
   return myMap //Result: [0:[az, ax], 1:[bz, bx], 2:[cz, cx], 3:[dz, dx]]

答案 1 :(得分:1)

您可以使用方法~>浏览列表并生成另一个列表,其值取决于原始列表(您在此方法中使用的推理由您决定。这里有一个小例子:

collect
编辑:对不起,我忽略了你希望得到一张地图的事实。这是一种类似于上述方法的方法。在这种情况下,您可以使用 def originalList = [1,2,3] def result = originalList.collect{obj-> def e1 = obj def e2 = obj*2 [e1,e2] } println result //[[1,1],[2,4],[3,6]] 浏览列表中的元素:

each