如何在数组结构中获取 groovy 中的单个值
How can I get in groovy a single value in an array structure
我的英语不是最好的,但我会尝试的:o)
我在 Jenkins 管道文件中遇到 groovy 问题。
我将展示我的代码与我的代码略有不同,这样理解起来就不那么复杂,但它们具有相同的含义。
我定义了一个这样的二维数组:
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 ->
name=entry.value.NAME
echo 'Name: '+name
// prints out the whole 2D array
echo "Print Out 1 = ${entry}"
// prints out only the name
echo "Print Out 2 = ${entry.value.NAME}"
// prints out the Telephone array
echo "Print Out 3 = ${entry.value.Telephone}"
// now I want to save only the first number "1234" to do later something with it...
save_first_number=?????
// print out the number array
entry.value.Devices.each{telephone ->
echo 'Number from: '+name
echo 'Number: '+telephone.value.number + ' - ID: '+telephone.value.id
}// End of => entry.value.Devices.each{entry ->
}// End of => array.each{entry ->
}
顺便说一句:
我知道这个地址数组在 Jenkins 中没有意义,但正如我所说,这只是我的代码中的一个例子!!
所以我的问题是,我不知道如何从第一个条目中的“数字”中仅获取第一个单个值 [1:] 我只需要值“1234”然后,当我去到下一次迭代,我想从彼得那里得到数字“9876”等等。
我的想法是这样的...
save_first_number = entry.value.Telephone[1].value.number
但这不起作用。
我希望我的意思很清楚:o)
我也希望有人能在这种情况下帮助我。
致以最诚挚的问候,祝您有愉快的一天。
由于 entry.value.Telephone[1] 是一个 HashMap,您可以像这样访问它的元素:
save_first_number = entry.value.Telephone[1]['number']
save_first_number = entry.value.Telephone[1].number // works as well
// to check types:
// println "${entry.value.Telephone[1].getClass()}" // returns LinkedHashMap
我的英语不是最好的,但我会尝试的:o)
我在 Jenkins 管道文件中遇到 groovy 问题。
我将展示我的代码与我的代码略有不同,这样理解起来就不那么复杂,但它们具有相同的含义。
我定义了一个这样的二维数组:
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 ->
name=entry.value.NAME
echo 'Name: '+name
// prints out the whole 2D array
echo "Print Out 1 = ${entry}"
// prints out only the name
echo "Print Out 2 = ${entry.value.NAME}"
// prints out the Telephone array
echo "Print Out 3 = ${entry.value.Telephone}"
// now I want to save only the first number "1234" to do later something with it...
save_first_number=?????
// print out the number array
entry.value.Devices.each{telephone ->
echo 'Number from: '+name
echo 'Number: '+telephone.value.number + ' - ID: '+telephone.value.id
}// End of => entry.value.Devices.each{entry ->
}// End of => array.each{entry ->
}
顺便说一句: 我知道这个地址数组在 Jenkins 中没有意义,但正如我所说,这只是我的代码中的一个例子!!
所以我的问题是,我不知道如何从第一个条目中的“数字”中仅获取第一个单个值 [1:] 我只需要值“1234”然后,当我去到下一次迭代,我想从彼得那里得到数字“9876”等等。
我的想法是这样的...
save_first_number = entry.value.Telephone[1].value.number
但这不起作用。
我希望我的意思很清楚:o) 我也希望有人能在这种情况下帮助我。
致以最诚挚的问候,祝您有愉快的一天。
由于 entry.value.Telephone[1] 是一个 HashMap,您可以像这样访问它的元素:
save_first_number = entry.value.Telephone[1]['number']
save_first_number = entry.value.Telephone[1].number // works as well
// to check types:
// println "${entry.value.Telephone[1].getClass()}" // returns LinkedHashMap