如何在Azure Bicep中从区域数组生成唯一区域对?
在Azure Bicep中生成环形区域配对数组
假设你需要将给定的区域数组(如['eastus','westeurope','westus'])转换为环形的唯一区域对数组(每个区域依次与下一个区域配对,最后一个区域与第一个区域配对),可以通过以下Bicep代码实现:
实现代码
// 定义输入的区域数组 param regions array = ['eastus', 'westeurope', 'westus'] // 生成环形区域配对数组 var regionPairs = [for i in range(0, length(regions)): { A: regions[i] B: regions[(i + 1) % length(regions)] }] // 输出结果(可选,用于验证) output generatedPairs array = regionPairs
代码说明
- 用
range(0, length(regions))遍历区域数组的每个索引; - 对每个索引
i,取当前区域作为A,通过(i + 1) % length(regions)计算下一个区域的索引(取模运算确保最后一个索引的下一个元素是数组第一个元素); - 最终生成的
regionPairs数组完全匹配你给出的示例结果:[ {"A": "eastus", "B": "westeurope"}, {"A": "westeurope", "B": "westus"}, {"A": "westus", "B": "eastus"} ]
如果你需要的是所有不重复的有序区域对(每个区域与其他所有区域各配对一次),可以用以下代码:
param regions array = ['eastus', 'westeurope', 'westus'] // 生成所有可能的配对,再过滤掉A和B相同的项 var allUniquePairs = filter(flatten([for a in regions: [for b in regions: { A: a B: b }]]), pair => pair.A != pair.B) output allUniqueOrderedPairs array = allUniquePairs
这段代码会生成6组有效配对,结果为:
[ {"A": "eastus", "B": "westeurope"}, {"A": "eastus", "B": "westus"}, {"A": "westeurope", "B": "eastus"}, {"A": "westeurope", "B": "westus"}, {"A": "westus", "B": "eastus"}, {"A": "westus", "B": "westeurope"} ]
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

