【发布时间】:2021-07-07 09:22:05
【问题描述】:
我有 2 个地图列表。请允许我向您展示。
让我们称之为values_default:
[{A="abc", B="10"}]
和new_config:
[
{A="abc", B="9"},
{A="cdea", B="1000"},
{A="asd", B="otra cosa"},
]
然后我需要合并或连接它们,但以一种特殊的方式。 我需要做的是过滤掉A的重复项,取A的最小值为B。这就是最终想要的结果,也许还有其他方法可以做这是我正在尝试的,但只要我得到这两个输入和预期的结果,就可以了。对于上面的示例,结果应该是:
[
{A="abc", B="9"},
{A="cdea", B="1000"},
{A="asd", B="otra cosa"},
]
在这里,我们采用了具有较低 B 值的 A。
到目前为止我是这样做的:
locals {
tmp_cluster_parameters = concat(var.new_config, var.values_default)
final_cluster_parameters = distinct([for i in local.tmp_cluster_parameters: {
name = i.A
value = i.B
}])
}
这意味着我只能在地图完全相同时过滤掉 (A & B)。我尝试了更多的东西,但无法弄清楚如何更接近我的目标。对于上面的示例,这不会过滤掉任何内容。结果是这样的:
[
{A="abc", B="10"},
{A="abc", B="9"},
{A="cdea", B="1000"},
{A="asd", B="otra cosa"}
]
理想情况下它应该删除{A="abc", B="10"}
编辑 1: 回答来自@macin 的问题。这是今天的实际字段和一些进一步的解释
variable "cluster_parameters_default" {
description = ""
type = list(map(string))
default = [
{
name = "wait_timeout"
value = "800"
}
]
}
我以后会有一些默认参数。这些是 MySQL 参数组的默认值。这里cluster_parameters_default 是values_default,name 是A 和value 是B。我们的想法是有一些ENFORCEABLE MySQL 配置默认值,我们可以根据允许的值覆盖更大或更小的值。此默认设置将为许多 DB 的许多配置创建一个允许的围墙花园。例如,安全团队可能要求我们将wait_timeout 设置为小于 15 分钟。现在,我们还应该能够始终拥有一个不同的值,该值小于安全团队要求的 15 分钟。除此之外,还有更多来自new_config 的值。我不想解释这一切,因为这是一个更大项目的一部分。这意味着它将更加复杂。这就是为什么values_default、A 和B。我可以更改此变量 values_default 的格式,因为它是我自己的变量,但我无法更改 new_config,因为它被我无法控制的许多其他事物使用。
Edit2:其他数据集(DSx)。
DS1:
values_default:
[{A="abc", B="10"}]
然后new_config:
[
{A="cdea", B="1000"},
{A="asd", B="otra cosa"},
]
这里想要的输出应该是:
[
{A="abc", B="10"},
{A="cdea", B="1000"},
{A="asd", B="otra cosa"},
]
DS2:
values_default:
[
{A="abc", B="10"},
{A="cdea", B="111"},
]
然后new_config:
[
{A="abc", B="8"},
{A="cdea", B="1000"},
{A="asd", B="otra cosa"},
]
在这种情况下,所需的输出是:
[
{A="abc", B="8"},
{A="cdea", B="111"},
{A="asd", B="otra cosa"},
]
DS3:
values_default:
[
{A="abc", B="10"},
{A="cdea", B="111"},
]
那么 new_config 在这种情况下不会被声明。
在这种情况下,所需的输出是values_default:
[
{A="abc", B="10"},
{A="cdea", B="111"},
]
【问题讨论】:
-
你能提供更好的例子吗?
values_default没有任何重复的开头,所以我不明白你想要完成什么。 -
添加了一个编辑@Marcin。谢谢你的提问。
-
我不明白-“取最小的B”?最小的什么,怎么做?你能举个例子来选择这样的“最小”值吗?
-
我们有一个重复的键
A在这种情况下A="abc"用于该键,如果在values_default和new_config中都存在重复,那么我们将选择其中一个。较小的一个基于B的值。在上面的例子中{A="abc", B="9"}。我将进行编辑以使其更清晰。 -
@Marcin 添加了有关您的问题的更多详细信息。再次非常感谢!