Groovy(Jenkins Pipeline)如何获取二维数组中的指定单个值?
解决Jenkins Pipeline Groovy中获取二维Map首个电话号码的问题
我明白你的需求啦——你需要遍历每个用户条目,提取他们的第一个电话号码(比如PAUL的1234、PETER的9876),对吧?先帮你梳理下代码里的小问题,再给出解决方案:
首先,你的代码有两个小问题:
- 遍历电话号码时,你写的是
entry.value.Devices.each,但你的数组里键是Telephone,应该改成entry.value.Telephone.each - 你尝试的
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
相关产品推荐
相关产品推荐

