比较GO中的地图值

时间:2015-09-30 05:43:14

标签: dictionary go

我必须比较两种类型' mydb = new DBHelper(this.getActivity()); Cursor rs = mydb.getData(Value); id_To_Update = Value; rs.moveToFirst(); String addr_type = rs.getString(rs.getColumnIndex(DBHelper.ADDRESS_COLUMN_ADDRESSTYPE)); String addr_line1 = rs.getString(rs.getColumnIndex(DBHelper.ADDRESS_COLUMN_LINE1)); String addr_line2 = rs.getString(rs.getColumnIndex(DBHelper.ADDRESS_COLUMN_LINE2)); String addr_city = rs.getString(rs.getColumnIndex(DBHelper.ADDRESS_COLUMN_CITY)); String addr_zipcode = rs.getString(rs.getColumnIndex(DBHelper.ADDRESS_COLUMN_ZIPCODE)); addr_country_index = rs.getString(rs.getColumnIndex(DBHelper.ADDRESS_COLUMN_COUNTRY)); addr_state_index = rs.getString(rs.getColumnIndex(DBHelper.ADDRESS_COLUMN_STATE)); String addr_landmark = rs.getString(rs.getColumnIndex(DBHelper.ADDRESS_COLUMN_LANDMARK)); if (!rs.isClosed()) { rs.close(); mydb.close(); } '的地图的值(而不是键)。

地图的内容为:map[string]float64map1[ABCD:300 PQRS:400] 不,我做的检查就像值(map1)/值(map2)> = 1(如300/30 = 10> 1),然后做一些事情。

我怎样才能在GO中实现这一目标? TIA。

我试过这样的事情:

map2[ABCD:30 PQRS:40]

1 个答案:

答案 0 :(得分:1)

Playground working example

分解主循环:

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 := m2[key]逗号确定语法,我既可以找出第二张地图对于给定密钥的关联值,又可以确保周围if ... ; ok时存在该映射条目。根据您对问题的描述,没有必要检查第二个地图的每个元素,只检查与第一个地图共享密钥的那些元素。我们进行这项检查非常重要,因为在检查地图中不存在的密钥时,不会抛出错误,它只是默默地返回变量的零值 - 在这种情况下可能意味着之后除以零。

第三,嗯,只是一些格式化的印刷线,以帮助了解发生了什么,真正的果汁是非常简单的if value1/value2 > 1声明。请注意,我还在我的游乐场链接中添加了一些不符合要求的地图条目,以帮助证明行为是正确的。

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