寻找地图中的关键,给定的值(Finding the key in a map, given the

2019-08-04 18:30发布

您好我有一个图是这样的:

[this:0, is:1, a:2, file:3, anotherkey:4, aa:5]

我希望我能找到的key给定的value的地图。 例如,如果值5赋予我需要返回aa从地图。

那可能吗?

Answer 1:

我不知道如果有一个直接的方法来获取给定值的关键,但使用Map#find得到一个映射条目,然后获取其值应足够:

def keyForValue(map, value) {
    map.find { it.value == value }?.key
}

def map = [a: 1, b: 2, c: 3]
assert keyForValue(map, 2) == 'b'
assert keyForValue(map, 42) == null

在一般情况下,地图不需要有自己的条目之间的顺序关系,但对Groovy的字面地图默认的实现是LinkedHashMap的,这有序的,所以keyForValue使用这些地图时,总是生成一个值的第一个关键。



Answer 2:

有没有具体的命令为。

幸运的是,表现出在这里 ,你可以很容易地在地图的特定值的键(S):

def myMap = [this:0, is:1, a:2, file:3, fix:4, aa:5]
def myValue = 5

你可以做:

def myKey = myMap.find{ it.value == myValue }?.key
// 'aa'

如果你想所有的钥匙,做这样的事情:

def myMap = [this:0, is:1, a:2, file:3, fix:4, aa:5, bb:5]
def myValue = 5

def myKeys = []
myMap.findAll{ it.value == myValue }.each{myKeys << it?.key}
// ['aa', 'bb']


Answer 3:

你可以反转地图,就像这样:

Map m = [a: '1', b: '2']
Map mInvert = m.collectEntries { e -> [(e.value): e.key] }

assert mInvert == ['1':'a', '2':'b']

assert mInvert['2'] == 'b'
assert m['b'] == '2'


Answer 4:

你可能不得不遍历项设置自己,并尝试找到匹配的项值 。



Answer 5:

def expect = 5
def m = ['this':0, is:1, a:2, file:3,  aa:5]
def r = m.collectMany{ k,v -> (v == expect) ? [k] : []}

// Result: [aa]


文章来源: Finding the key in a map, given the value
标签: groovy map