根据值从地图中删除重复项

问题描述 投票:0回答:1

我有一个映射到局部变量的元组

locals {
  my_val = [
    {
      region = "us-east-1"
      value  = 1000
      data = 3000
    },
    {
      region = "us-east-1"
      value = 1001
      data = 4000
    },
    {
      region = "us-east2"
      value = 1002
      data = 5000
    }
  ]
}

我需要根据该对的值删除重复项,这里我想放置区域

us-east-1
的条件,输出应该是

{
my_val = [
    {
      region = "us-east-1"
      value  = 1000
      data = 3000
    },
    {
      region = "us-east2"
      value = 1002
      data = 5000
    }
  ]
}

需要帮助在地图对象的值上应用不同值。

terraform tuples
1个回答
6
投票

如果我理解正确的话,这是一个简单的方法,你想要保持不同的

region
而不是不同的
(region,value)

locals {
  new_val = values(zipmap(local.my_val.*.region, local.my_val))
}

zipmap()
创建
region => {region,value}
的映射以重复
region
使用
local.my_val
最高索引的映射(因此后面的值会覆盖之前的值)。

values()
然后提取原始地图。

您还可以

revert()
输入和输出列表以保持最低索引。

如果您关心

value
是否唯一,只需将第一个参数相应地更改为
zipmap()
,但您可能需要将其转换为字符串。

如果你想保持不同的

(region,value)
(例如,具有多个值的相同区域),那么它会变得有点棘手,因为你需要创建一个组合键:

locals {
  new_val = values(
    zipmap(
      [for m in local.my_val : join(":", [m.region, m.value])],
      local.my_val
    )
  )
}

我希望这有帮助;)

© www.soinside.com 2019 - 2024. All rights reserved.