You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy(Jenkins Pipeline)如何获取二维数组中的指定单个值?

解决Jenkins Pipeline Groovy中获取二维Map首个电话号码的问题

我明白你的需求啦——你需要遍历每个用户条目,提取他们的第一个电话号码(比如PAUL的1234、PETER的9876),对吧?先帮你梳理下代码里的小问题,再给出解决方案:

首先,你的代码有两个小问题:

  1. 遍历电话号码时,你写的是entry.value.Devices.each,但你的数组里键是Telephone,应该改成entry.value.Telephone.each
  2. 你尝试的save_first_number = entry.value.Telephone[1].value.number多了一层.value——因为Telephone[1]已经是包含number和id的Map,直接访问.number就可以

修正后的完整代码示例

def address=[ 
    1: [NAME:'PAUL', Telephone: [ 
        1: [number: '1234', id:'office'], 
        2: [number: '2345', id:'mobile'], 
        3: [number: '4567', id:'home'], 
    ]], 
    2: [NAME:'PETER', Telephone: [ 
        1: [number: '9876', id:'office'], 
        2: [number: '7654', id:'mobile'], 
        3: [number: '5432', id:'home'], 
    ]], 
    3: [NAME:'MICHAEL', Telephone: [ 
        1: [number: '5647', id:'office'], 
        2: [number: '4738', id:'mobile'], 
        3: [number: '2954', id:'home'], 
    ]], 
]

def showNumbers(address){ 
    address.each{entry -> 
        def name=entry.value.NAME 
        echo 'Name: '+name 
        // 打印整个二维Map条目
        echo "Print Out 1 = ${entry}" 
        // 仅打印名称
        echo "Print Out 2 = ${entry.value.NAME}" 
        // 打印Telephone Map
        echo "Print Out 3 = ${entry.value.Telephone}" 
        
        // 获取第一个电话号码(两种方式都可以)
        // 方式1:通过键1直接获取(因为你的Telephone键是从1开始的有序键)
        def save_first_number = entry.value.Telephone[1].number
        // 方式2:如果Telephone的键不确定是从1开始,取values的第一个元素
        // def save_first_number = entry.value.Telephone.values().first().number
        
        echo "First number for ${name}: ${save_first_number}"
        
        // 遍历所有电话号码(修正了Devices为Telephone)
        entry.value.Telephone.each{telephoneEntry -> 
            echo 'Number from: '+name 
            echo "Number: ${telephoneEntry.value.number} - ID: ${telephoneEntry.value.id}"
        }
    } 
}

// 调用函数
showNumbers(address)

关键解释:

  • 你的address和Telephone其实都是Groovy的LinkedHashMap(有序键值对),不是严格意义上的数组,所以可以通过键直接访问,或者用values()获取所有值的集合,再用first()取第一个元素
  • 如果你担心Telephone的键不是固定从1开始,推荐用entry.value.Telephone.values().first().number,这样不管键是什么,都能拿到第一个存入的电话号码
  • 注意在Jenkins Pipeline里,变量最好用def声明(比如def name、def save_first_number),避免隐式全局变量带来的问题

内容的提问来源于stack exchange,提问作者Viewer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:27:07