dictionary - 平面地图中的 Groovy 字符串操作
问题描述
我正在为恰好使用 groovy 的 Nextflow 工作流程编写一些代码。
我有一个包含以下参数的 JSON 配置文件:
"barcodes": {
"004F--004R": {
"laa_params": {
"--minLength": "5000",
"--ignoreEnds": "60",
"--maxReads": "2500",
"--maxPhasingReads": "500"
}
},
"014F--014R": {
"laa_params": {
"--minLength": "5000",
"--ignoreEnds": "60",
"--maxReads": "2500",
"--maxPhasingReads": "500"
}
},
而我需要做的是制作条形码地图:laa_params。目前我这样做:
transform_barcodes = barcodes.flatMap { it -> [it] }
results = transform_barcodes.flatMap { it -> [ [it, analysis_config.barcodes[it].laa_params] ] }
这给了我这些结果:
DataflowQueue(queue=[DataflowVariable(value=[004F--004R, {--minLength=5000, --ignoreEnds=60, --maxReads=2500, --maxPhasingReads=500}]), DataflowVariable(value=[014F--014R, {--minLength=5000, --ignoreEnds=60, --maxReads=2500, --maxPhasingReads=500}]),...
我最终需要的是:
[004F--004R, {--minLength 5000, --ignoreEnds 60, --maxReads 2500, --maxPhasingReads 500}]
我怎样才能做到这一点?我是 groovy 的新手,但可能只是在地图上做一个 for 循环并将 = 替换为“”?任何帮助,将不胜感激!
解决方案
def json = '''
{
"barcodes": {
"004F--004R": {
"laa_params": {
"--minLength": "5000",
"--ignoreEnds": "60",
"--maxReads": "2500",
"--maxPhasingReads": "500"
}
},
"014F--014R": {
"laa_params": {
"--minLength": "5000",
"--ignoreEnds": "60",
"--maxReads": "2500",
"--maxPhasingReads": "500"
}
}
}
}
'''
json = new groovy.json.JsonSlurper().parseText(json)
def plainMap = json.barcodes.collectEntries{k0,v0-> [k0, v0.laa_params.collect{k1,v1-> "$k1 $v1" }.join(' ') ]}
plainMap.each{k,v->
println "$k :: $v"
}
印刷
004F--004R :: --minLength 5000 --ignoreEnds 60 --maxReads 2500 --maxPhasingReads 500
014F--014R :: --minLength 5000 --ignoreEnds 60 --maxReads 2500 --maxPhasingReads 500
推荐阅读
- kubernetes - Docker桌面kubernetes添加节点
- angular - 当没有写入时,我可以在我的事务中返回什么?
- google-authentication - 确定 500 错误的原因 Google 身份验证
- bash - 防止链式命令中过早的 shell 参数扩展
- postgresql - 无法在 PgAdmin 中保存双精度 []
- bash - 将txt文件中的所有值与另一个值相乘
- node.js - 使用 Mocha 和 Supertest 测试缓存
- php - 加入表格时如何使用 with()
- github - 在家里的电脑上看不到 git 分支
- tsql - 遍历数据库中的每个表并获取一列的前三位