![](/img/trans.png)
[英]Groovy map compare key from one test step and value of another test step and assert if it's true or false
[英]Compare a map's value with another map value in groovy
我有一个要求,如果我想获取第一张地图的key
,我想和另一map's value
a map's value
一起检查a map's value
虚拟化地图
def virtua=[
"VMWARE" : "00:68:8B:",
"VMWARE" : "00:68:8A",
"COLINUX" : "00:18:8A:"
]
网络图
def network=[
"eth0":"00:68:8B:",
"eth1":"00:18:8A:",
"eth2":"00:68:8A:"
]
因此,在从network
& virtua
匹配值之后,我得到以下输出,如何在Groovy中做到这一点?
eth0,00:68:8B:,VMWARE
eth1,00:18:8A:,COLINUX
eth2,00:68:8A:,VMWARE
更新 @tim_yates和@Xaerxess回答后,我认为最好将MAC地址作为密钥,因为VMWARE
可以复制
def virtua1=[
"00:68:8B:" : "VMWARE",
"00:68:8A:" : "VMWARE",
"00:18:8A:" : "COLINUX"
]
def coll = network.collect { k, v ->
//[ k, v, virtua.find { a, b -> b == v }?.key ]
print "$k,$v,"
println virtua1.find{ a, b -> a == v }?.value
}
输出量
eth0,00:68:8B:,VMWARE
eth1,00:18:8A:,COLINUX
eth2,00:68:8A:,VMWARE
映射中不能有重复的键(您有多个VMWARE
条目),并且网络变量是列表而不是映射...
更正这些,并假设您的意思是:
def virtua=[
"VMWAREA" : "00:68:8B:",
"VMWAREB" : "00:68:8A:",
"COLINUX" : "00:18:8A:"
]
def network=[
"eth0":"00:68:8B:",
"eth1":"00:18:8A:",
"eth2":"00:68:8A:",
]
你可以做:
def coll = network.collect { k, v ->
[ k, v, virtua.find { a, b -> b == v }?.key ]
}
为您提供清单:
[ ["eth0", "00:68:8B:", "VMWAREA"],
["eth1", "00:18:8A:", "COLINUX"],
["eth2", "00:68:8A:", "VMWAREB"] ]
如果您希望将其打印为以逗号分隔的字符串,则可以执行以下操作:
coll*.join(',').each { println it }
在评论中,有人问我一个映射,该映射具有作为列表的值(以解决重复键问题);
def virtua=[
"VMWARE" : [ "00:68:8B:", "00:68:8A:" ],
"COLINUX" : [ "00:18:8A:" ]
]
def network=[
"eth0":"00:68:8B:",
"eth1":"00:18:8A:",
"eth2":"00:68:8A:",
]
network.each { k, v ->
println "$k,$v,${virtua.find { it.value.grep( v ) }?.key}"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.