【问题标题】:How to remove multiple items from map [closed]如何从地图中删除多个项目[关闭]
【发布时间】:2020-07-21 09:24:02
【问题描述】:

我有以下代码:

package main

import "fmt"

func main() {
    var m = make(map[string]int)
    m["x-edge-location"] = 10
    m["x-edge-request-id"] = 20
    m["x-edge-response-result-type"] = 30
    m["x-edge-result-type"] = 40

    fmt.Println(m)

    delete(m, "x-edge-result-type")
    delete(m, "x-edge-location")
    fmt.Println(m)
}

这是从地图中删除多个项目的唯一方法吗?

【问题讨论】:

  • 您还想怎么做? delete 只需要一个键,因此您需要调用它的次数与要删除的元素一样多。你可以遍历一段键来删除,但这几乎是一样的。
  • 根据博客,只有一种删除键的方法,即基于每个键。 blog.golang.org/mapsstackoverflow.com/questions/1736014/delete-mapkey-in-go
  • 是的,如果您需要删除多个项目,这很简单,自己编写一个可变参数函数并使用。
  • 好的,我明白了,谢谢
  • 根据您需要删除的元素数量,使用您想要保留的元素创建一个新数组可能会更容易。

标签: go


【解决方案1】:

[我]这是从地图中删除多个项目的唯一方法吗?

是的。

【讨论】:

    【解决方案2】:

    删除多个项目的唯一其他方法是遍历地图。这将删除所有项目,但您可以将 delete 包装在一些 if 中以匹配您的模式:

    package main
    
    import "fmt"
    
    func main() {
        var key string
        var m = make(map[string]int)
        m["x-edge-location"] = 10
        m["x-edge-request-id"] = 20
        m["x-edge-response-result-type"] = 30
        m["x-edge-result-type"] = 40
    
        fmt.Println(m)
    
        for key = range m {
            delete(m, key)
        }
    
        fmt.Println(m)
    }
    

    【讨论】:

    • 也一样。您仍在为要删除的每个键调用 delete
    • 1.与 OP 的示例相比,这在客观上 更干净。尽管对于大量的键,循环确实有意义。 2. 当然过滤器可能有用,但 OP 没有问这个问题。 3. OP 不想多次调用delete。在这方面,这绝对是一样的。
    • 1.您认为调用 10、100、1000 delete 看起来并不比遍历循环更干净? 2. 是的,您可以使用过滤器,它比手动调用 10、100、1000 次 delete 效果更好。 3. 在我的示例中,delete 只写了一次。确切地说,OP 要求:“从地图中删除多个项目” - OP 没有提及“多次致电 delete”,因此您的评论无效。您正在这里制作您的故事。看最初的问题。
    • 1.不,我认为 2 deletes 比循环更干净。 3. 写多少次与实际复杂度无关。
    • 再次,OP 的问题是:“这是从地图中删除多个项目的唯一方法吗?”用循环回答有助于理解 - 不,这不是从地图中删除项目的唯一方法,是的,将来,当您需要删除 2 个以上的项目时,例如 1000,您将使用循环,而不是 1000带有delete 语句的行。再说一遍,OP没有说“多次致电delete”,您编造了这一点以支持您的论点。讨论结束。
    猜你喜欢
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2013-03-17
    • 2023-03-23
    • 2015-11-04
    • 2012-03-31
    • 2012-11-03
    • 1970-01-01
    相关资源
    最近更新 更多