按键和值范围和计数
Range and count by key and value
我正在尝试在我的地图上进行测距[string]地图[string]界面{}
下面是我的代码:
var marshallJSON Level
var itemCountAll int64
var itemCountPending int64
var itemCountError int64
var itemCountWarning int64
var itemCountCritical int64
var m []*bson.M
for k, value := range modules {
for _ , level := range value {
if level == "err" {
itemCountError += 1
}
if level == "warning" {
itemCountWarning += 1
}
if level == "pending" {
itemCountPending += 1
}
}
itemCountCritical = itemCountError + itemCountWarning
itemCountAll = itemCountPending + itemCountCritical
marshallJSON = Level{All: itemCountAll, Pending: itemCountPending, Critical: itemCountCritical}
if k != "null" {
m = append(m, &bson.M{"module": k, "nb_nodes": marshallJSON})
}
}
我的变量 modules
中包含的值的示例:
{"Module_one":{"host_one":"pending","host_two":"pending"},"Module_two":{"host_three":"err","host_four":"warning","host_five":"pending"}}
我得到这个输出:
[{"module":"Module_one","nb_nodes":{"all":2,"pending":2,"critical":0}},{"module":"Module_two","nb_nodes":{"all":5,"pending":3,"critical":2}}]
我想要这个输出:
[{"module":"Module_one","nb_nodes":{"all":2,"pending":2,"critical":0}},{"module":"Module_two","nb_nodes":{"all":3,"pending":1,"critical":2}}]
问题在于它采用为先前模块计算的值并将它们相加
我的问题是如何计算每个模块的状态数?
您必须在开始下一次迭代之前重置计数器,因此外循环的每次迭代都不会包括之前的模块:
for k, value := range modules {
itemCountError, itemCountWarning, itemCountPending, itemCountCritical,
itemCountAll = 0, 0, 0, 0, 0
// ...
}
或者更好的是,只需在循环内声明计数器,这样它们在每次迭代中总是从 0
开始:
for k, value := range modules {
var itemCountError, itemCountWarning, itemCountPending,
itemCountCritical, itemCountAll int64
// ...
}
还要注意bson.M
是一个地图,你不需要指向地图的指针(),所以使用:
var m []bson.M
我正在尝试在我的地图上进行测距[string]地图[string]界面{}
下面是我的代码:
var marshallJSON Level
var itemCountAll int64
var itemCountPending int64
var itemCountError int64
var itemCountWarning int64
var itemCountCritical int64
var m []*bson.M
for k, value := range modules {
for _ , level := range value {
if level == "err" {
itemCountError += 1
}
if level == "warning" {
itemCountWarning += 1
}
if level == "pending" {
itemCountPending += 1
}
}
itemCountCritical = itemCountError + itemCountWarning
itemCountAll = itemCountPending + itemCountCritical
marshallJSON = Level{All: itemCountAll, Pending: itemCountPending, Critical: itemCountCritical}
if k != "null" {
m = append(m, &bson.M{"module": k, "nb_nodes": marshallJSON})
}
}
我的变量 modules
中包含的值的示例:
{"Module_one":{"host_one":"pending","host_two":"pending"},"Module_two":{"host_three":"err","host_four":"warning","host_five":"pending"}}
我得到这个输出:
[{"module":"Module_one","nb_nodes":{"all":2,"pending":2,"critical":0}},{"module":"Module_two","nb_nodes":{"all":5,"pending":3,"critical":2}}]
我想要这个输出:
[{"module":"Module_one","nb_nodes":{"all":2,"pending":2,"critical":0}},{"module":"Module_two","nb_nodes":{"all":3,"pending":1,"critical":2}}]
问题在于它采用为先前模块计算的值并将它们相加
我的问题是如何计算每个模块的状态数?
您必须在开始下一次迭代之前重置计数器,因此外循环的每次迭代都不会包括之前的模块:
for k, value := range modules {
itemCountError, itemCountWarning, itemCountPending, itemCountCritical,
itemCountAll = 0, 0, 0, 0, 0
// ...
}
或者更好的是,只需在循环内声明计数器,这样它们在每次迭代中总是从 0
开始:
for k, value := range modules {
var itemCountError, itemCountWarning, itemCountPending,
itemCountCritical, itemCountAll int64
// ...
}
还要注意bson.M
是一个地图,你不需要指向地图的指针(
var m []bson.M