0

如何获取键列表或键集的所有值,而不是获取键的映射值。

4

2 回答 2

2
def map = [1:"A", 2:"B", 3:"C", 4:"D"]
def keySet = [1, 2, 3]

assert ['A', 'B', 'C'] == keySet.collect{map[it]}
assert ['A', 'B', 'C'] == map.collectMany{k,v -> k in keySet ? [v] : []}
assert ['A', 'B', 'C'] == map.findResults{k,v -> k in keySet ? v : null}

如果我花一些时间来回答这个问题,那么其他方法就很少了。:)

于 2013-10-10T01:15:02.313 回答
1

我认为您正在寻找方便的方法,例如强大的Python切片。对于采用键列表的groovy当前方法:subMap

Map m = [one: 1, two: 2, three: 3, four: 4]

m.subMap(['two', 'three'])
// Off course with groovy flexible syntax you may do simple:
m.subMap('two', 'three')
// Or even:
m.subMap 'two', 'three', 'non-existent'

两种变体都将返回['two':2, 'three':3]

如果我们请求不存在的密钥也不会出错。

作为参数,您不仅可以提供任何集合List,例如Range也可能非常有用。

您可能会在 Klein Ikkink 博客文章中找到一些其他示例:http: //mrhaki.blogspot.ru/2009/10/groovy-goodness-getting-submap-from-map.html

于 2016-09-24T18:06:25.207 回答