![](/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.