如何检查一个地图数组是否包含另一个地图数组的地图?

时间:2015-02-27 08:22:43

标签: dictionary groovy

我需要检查一个Map数组是否包含另一个

def map1 = [[key1:"value1", key2:"value2"], [key3:"value3", key4:"value4"]]
def map2 = [[key1:"value1", key2:"value2"]]

目前我有方法在地图数组中查找地图并比较它们

def "method"(map2){ def map1 = arrayOfmap def matches = map1.findAll { map2.contains(it) } assert matches == map2 //return true }

现在我想编写一个方法来搜索地图myMap数组并检查myMap中的所有值是否都在map1中找到

例如:

我有

def map1 = [[key1:"value1", key2:"value2"], [key3:"value3", key4:"value4"]] def map2 = [[key1:"value1"]]

我需要检查map1是否包含map2

2 个答案:

答案 0 :(得分:0)

不确定你的意思,但是给出了:

def map1 = [[key1:"value1", key2:"value2"], [key3:"value3", key4:"value4"]]

假设您的意思是map2中的每个元素必须出现在map1的其中一个地图中,您可以执行以下操作:

boolean allFoundIn(List<Map> map, List<Map> query) {
    query.every { m2 -> map.any { m1 -> m2.every { m2a -> m1[m2a.key] == m2a.value } } }
}

assert allFoundIn(map1, [[key1:'value1']])
assert allFoundIn(map1, [[key3:'value3'], [key2:'value2']])
assert !allFoundIn(map1, [[key1:'value1'], [keyNone:'not found']])

// Multiple values in one map have to all match the same map in the source
assert allFoundIn(map1, [[key1:'value1', key2:'value2']])
assert !allFoundIn(map1, [[key1:'value1', key3:'value3']])

答案 1 :(得分:0)

要查找map1(位误导示例map1实际上是列表而不是地图)包含map2(另一个列表)中的所有元素,您可以使用{{ 1}}方法,containsAll方法或从intersect中减去map1的所有元素,请注意,在部分匹配时,它不会通过,请参阅下面的map2

map3