Dictionary 比较GO中地图的值

Dictionary 比较GO中地图的值,dictionary,go,Dictionary,Go,我必须比较两个类型为“map[string]float64”的映射的值(而不是键) 地图的内容是:map1[ABCD:300 PQRS:400]和map2[ABCD:30 PQRS:40] 不,我做了一个检查,比如值(map1)/值(map2)>=1(比如300/30=10>1),然后做一些事情 我怎样才能在围棋中做到这一点? 蒂亚 我试过这样的方法: for key := range m2{ for k := range m1{ temp

我必须比较两个类型为“
map[string]float64
”的映射的值(而不是键)

地图的内容是:
map1[ABCD:300 PQRS:400]
map2[ABCD:30 PQRS:40]
不,我做了一个检查,比如值(map1)/值(map2)>=1(比如300/30=10>1),然后做一些事情

我怎样才能在围棋中做到这一点? 蒂亚

我试过这样的方法:

for key := range m2{
            for k := range m1{
                temp := m1[k] / m2[key]
                fmt.Println("temp*******", temp)
            }
        }

分解主for循环:

for key, value1 := range m1 {
    if value2, ok := m2[key]; ok {
        fmt.Printf("%f / %f = %f\n", value1, value2, value1/value2)
        if value2 != 0 && value1/value2 > 1 {
            fmt.Println("Greater than 1!")
        } else {
            fmt.Println("Not greater than 1!")
        }
    }
}
首先,我使用
range
为m1中的每个条目提取一个值和一个键,因为我们需要两者

其次,使用
value2的逗号ok语法,ok:=m2[key]
,我既要找出给定键的第二个映射的关联值,也要确保当周围的
if…,存在映射条目;好的
。根据您对问题的描述,不必检查第二个映射的每个元素,只检查与第一个映射共享密钥的元素。我们做这个检查很重要,因为go在检查一个不存在的键的映射时不会抛出错误,它只是默默地返回变量的零值——在这种情况下,可能意味着以后要除以零

第三,好的,只是一些格式化的打印行来帮助查看发生了什么,真正的精髓是非常简单的
if value1/value2>1
语句。请注意,我还在我的游乐场链接中添加了一些不符合要求的地图条目,以帮助证明行为是正确的


另一个答案中链接的“go maps in action”博客文章确实是在go中使用地图的一个很好的来源。

什么是
value(map1)
意思
map1
有两个不同的值,值(map1)应该是300还是400?您知道如何访问给定键的映射值吗?嗨,阿米特,我想运行一个循环并比较每个键之间关联的值。所以基本上我想做的是:300/30;400/40等等。。。希望你明白我的疑问。谢谢:)你能确定这两张地图有相同的钥匙吗?是否可能
map1
有一些
map2
没有的键,或者反之亦然?不,它们都有相同的键,并且都有与我所展示的完全相同的数据类型。请通读我的代码,因为我刚刚编辑了我的问题。这个问题仍然很不清楚。你会说“如果value(map1)/value(map2)>=1…那么就做点什么”,但是在你展示的代码中,没有
if
。您是否希望为条件成立的每个键“做点什么”?或者,如果条件适用于所有键,您是否只想“做某件事”一次?也许您可以提供几个不同的输入示例,以及预期的输出是什么。换言之,明确说明所需的行为。您不需要测试是否被零除:
value1/value2>1
True,很容易修复和完成。有趣的是,上面的代码没有恐慌,但更糟糕的是:
value1/value2>1
在value2为零时解析为true。由于IEEE 754的特殊行为:
zero:=float64(0);fmt.Println(42.0/zero)
+Inf