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
。