首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将映射的值与groovy中的另一个映射值进行比较

将映射的值与groovy中的另一个映射值进行比较
EN

Stack Overflow用户
提问于 2011-11-18 08:38:31
回答 1查看 3.5K关注 0票数 0

我有一个要求,如果它匹配的话,我想用另一个map's value检查map's value,我想得到第一张地图的key

虚拟化图

代码语言:javascript
复制
def virtua=[
    "VMWARE"        :   "00:68:8B:",
    "VMWARE"        :   "00:68:8A",
    "COLINUX"       :   "00:18:8A:"
]

网络地图

代码语言:javascript
复制
def network=[
    "eth0":"00:68:8B:",
    "eth1":"00:18:8A:",
    "eth2":"00:68:8A:"
]

因此,在匹配了来自networkvirtua的值之后,我得到了下面的输出,如何在groovy中实现它呢?

代码语言:javascript
复制
eth0,00:68:8B:,VMWARE
eth1,00:18:8A:,COLINUX
eth2,00:68:8A:,VMWARE

更新@tim_yates & @Xaerxess应答之后,我认为最好使用MAC Addr作为密钥,因为VMWARE可以复制

代码语言:javascript
复制
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
}

输出

代码语言:javascript
复制
eth0,00:68:8B:,VMWARE
eth1,00:18:8A:,COLINUX
eth2,00:68:8A:,VMWARE
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-18 08:46:21

您不能在地图中有重复的键(您有多个VMWARE条目),并且您的网络变量是一个列表而不是一个映射.

纠正这些,并假设你的意思是:

代码语言:javascript
复制
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:",
]

你可以:

代码语言:javascript
复制
def coll = network.collect { k, v ->
  [ k, v, virtua.find { a, b -> b == v }?.key ]
}

给你一份清单:

代码语言:javascript
复制
[ ["eth0", "00:68:8B:", "VMWAREA"],
  ["eth1", "00:18:8A:", "COLINUX"],
  ["eth2", "00:68:8A:", "VMWAREB"] ]

如果要将其打印为逗号分隔字符串,则只需:

代码语言:javascript
复制
coll*.join(',').each { println it }

编辑--键:列表示例

在评论中,我被问到了一个将值作为列表的Map (为了绕过重复的关键问题);

代码语言:javascript
复制
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}"
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8179712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档