给定值,在地图中查找关键字

sri*_*ram 9 groovy map

嗨我有这样的地图:

[this:0, is:1, a:2, file:3, anotherkey:4, aa:5]
Run Code Online (Sandbox Code Playgroud)

我希望我能找到key给定的value一个地图.例如,如果5给出了值,我需要aa从地图返回.

那可能吗?

epi*_*ian 16

我不知道是否有一个直接的方法来获取给定值的键,但是使用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
Run Code Online (Sandbox Code Playgroud)

通常,映射不需要在它们的条目之间具有顺序关系,但是Groovy的文字映射的默认实现是LinkedHashMap,它有序的,因此keyForValue在使用这些映射时将始终产生值的第一个键.


luc*_*e84 6

对此没有具体的命令.

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

def myMap = [this:0, is:1, a:2, file:3, fix:4, aa:5]
def myValue = 5
Run Code Online (Sandbox Code Playgroud)

你可以做:

def myKey = myMap.find{ it.value == myValue }?.key
// 'aa'
Run Code Online (Sandbox Code Playgroud)

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

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']
Run Code Online (Sandbox Code Playgroud)


Jim*_*myB 1

您可能必须自己迭代条目集并尝试查找具有匹配的条目。