douyan4900 2019-01-16 17:30
浏览 64
已采纳

在map [string] interface {}中检查多个键时使用OR逻辑

I have a map[string]interface{} called mapped:

mapped map[stringinterface{}

I want to iterate through it checking to see if either of these keys exist:

  • columns
  • rows

Then if so, I want to append the row or column to a slice of strings called:

  • columnOrRowArray

I understand that if I just needed to find, for example columns, within mapped I can do this:

var columnOrRowArray []string

if columnsOrRows, ok := mapped["columns"].([]interface{}); ok {
    for _, columnOrRow := range columnsOrRows {
        if columnOrRowValueIsString, ok = columnOrRow.(string); ok {
            columnOrRowArray = append(columnOrRowArray, columnOrRowValueIsString)
        }
    }
}

What would be a clean way without me duplicating the above for using row logic for the mapped["rows"]?

I want to do something that is basically this:

columnsOrRows, ok := mapped["columns"].([]interface{}) || mapped["rows"].([]interface{}); ok {

So in plain English, "if mapped has a the column or row key, assign to variable columnsOrRows"

Obviously I know the syntax for that is wrong, but I can't find an example of someone doing this

  • 写回答

1条回答 默认 最新

  • douchi0638 2019-01-16 17:39
    关注

    Test for both keys:

    columnsOrRows, ok := mapped["columns"].([]interface{})
    if !ok {
        columnsOrRows, ok = mapped["rows"].([]interface{})
    }
    
    if ok {
        for _, columnOrRow := range columnsOrRows {
            if columnOrRowValueIsString, ok = columnOrRow.(string); ok {
                columnOrRowArray = append(columnOrRowArray, columnOrRowValueIsString)
            }
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line