如果我在Groovy中得到一个包含2个或多个具有某个值的变量的列表,并且我想看看它是否包含给定的文本字符串,我将执行以下操作:
def msg = '''
Hello Mars!
'''
def msg1 = '''
Hello world!
'''
def list = [msg, msg1]
list.findAll { w ->
if(w.contains("Hello"))
{
println w
}
else
{
println "Not there"
}
}
但是,我不打印值,而是打印包含文本的变量名。这可以通过列表实现吗?还是我需要制作一张地图?
您需要使用Map
,因为从键到值的映射。
def msg = '''
Hello Mars!
'''
def msg1 = '''
Hello world!
'''
def map = [msg: msg, msg1: msg1]
map.findAll { key, value ->
if (value.contains("Hello")) {
println key
}
else {
println "Not there"
}
}
如果您将其作为Groovy脚本运行,您可以使用binding
归档而不是变量列表,但您需要在没有def
的情况下分配变量(因此它们成为绑定的一部分)。类似于:
aaa = 'Hello World!'
bbb = 'Goodbye all!'
ccc = 'Hello Mars!'
this.binding.variables.each { var ->
if (var.value ==~ /Hello.*/)
println "$var.key contains 'Hello'"
}
输出:
aaa contains 'Hello'
ccc contains 'Hello'