groovy 给定一个计算结果为布尔值的元素列表,我如何打印元素名称而不是值?

ilmyapht  于 2023-06-21  发布在  其他
关注(0)|答案(2)|浏览(107)

假设我有一些变量的值为true或false:

firstValue = true
secondValue = false
thirdValue = true

我把它们列在一个列表里:
def list = [firstValue, secondValue, thirdValue]
我想遍历列表并检查每个值是否返回true或false,如果值为true,我希望能够打印名称,即。第一值

for (item in list){
    if (item == true){
        println("${item} is true")
    }
}

这只是打印“真实是真实的”

mlmc2os5

mlmc2os51#

您的list只保存值(true/false),因此很难取回密钥。
考虑使用字典,它保存一些键,您可以迭代这些键以同时显示键和值

data = {
    "firstValue": True,
    "secondValue": False,
    "thirdValue": True
}

for key, value in data.items():
    if value:
        print(key, "is true")
firstValue is true
thirdValue is true
在线试用!

如果您确实需要一个单独的键列表,您可以使用下面的代码而不是调用items()

listOfKeys = list(data.keys())

for key in listOfKeys:
    if data[key]:
new9mtju

new9mtju2#

不知道,为什么另一个答案被接受,即使它的书面所有的方式在Python(?但在Groovy中,你有两个选择:
1.在一个Script中,你可以通过它们的名字来获取变量,如下所示:

firstValue = true
secondValue = false
thirdValue = true

def list = this.binding.variables.grep{ 'out' != it.key }

for (item in list){
    if (item.value){
        println "$item.key is true"
    }
}

1.你在一个Map中声明你的数据(在java中dict是如何被正式调用的),并迭代这些数据:

def map = [ firstValue:true, secondValue:false, thirdValue:true ]

for (item in map){
    if (item.value){
        println "$item.key is true"
    }
}

在这两种情况下,您将得到以下打印内容:

firstValue is true
thirdValue is true

相关问题