当前位置: 首页 > 面试题库 >

在范围循环内从地图中删除选定的键是否安全?

薛保臣
2023-03-14
问题内容

如何从地图上删除选定的键?delete()如下面的代码所示,与范围结合使用是否安全?

package main

import "fmt"

type Info struct {
    value string
}

func main() {
    table := make(map[string]*Info)

    for i := 0; i < 10; i++ {
        str := fmt.Sprintf("%v", i)
        table[str] = &Info{str}
    }

    for key, value := range table {
        fmt.Printf("deleting %v=>%v\n", key, value.value)
        delete(table, key)
    }
}

https://play.golang.org/p/u1vufvEjSw


问题答案:

这很安全!您还可以在Effective Go中找到类似的示例:

for key := range m {
    if key.expired() {
        delete(m, key)
    }
}

和语言规范:

未指定地图的迭代顺序,并且不能保证每次迭代之间都相同。如果 在迭代过程删除
尚未到达的地图条目,则不会生成相应的迭代值。如果映射条目是 在迭代过程创建的
,则该条目可能在迭代过程中产生或可以被跳过。对于创建的每个条目以及从一个迭代到下一个迭代,选择可能有所不同。如果映射为nil,则迭代次数为0。



 类似资料:
  • 问题内容: 在从地图上删除项目之前,我是否要放锁? 变体: 删除范围而不必担心 在切片中添加密钥,并在单独的范围内将其删除 l.RUnlock(); l.Lock(); delete(值,键); l。解锁;l.RLock(); 在范围内 go l.delete(key)// gorutin飞溅 带锁定/解锁的有效移除方式是哪种? 问题答案: 从映射中删除被视为写操作,并且必须与所有其他读和写序列化

  • 问题内容: 这段代码返回:8或10或6作为循环后映射的长度。视频在这里, 游戏 在这里。 我看到新添加的元素进入范围,但无法解释为什么此循环随机停止吗? 问题答案: 规格:对于声明: 未指定地图的迭代顺序,并且不能保证每次迭代之间都相同。如果在迭代过程中删除了尚未到达的映射条目,则不会生成相应的迭代值。 如果在迭代过程中创建了映射条目,则该条目可能在迭代过程中产生或可以被跳过。 对于创建的每个条目

  • 这是我的密码: 基本上,我正在编写一个程序来计算考试分数,但是首先用户必须输入0-100之间的分数。 如果用户输入的测试分数超出该范围,我希望程序告诉用户重写该数字。我不希望程序以错误结束。我该怎么做?

  • 问题内容: 我希望能够根据其他两个IP范围内的IP返回true / false。 例如: 结果应为true。 其他例子: 问题答案: 检查范围的最简单方法可能是将IP地址转换为32位整数,然后比较这些整数。 而不是,您可能想要查看具有InetAddresses帮助器类的Guava库,该类避免了DNS查找的可能性。

  • 用途:我有一个零件列表,每个工作都有变化。 我的每个part#都有3行,这就是为什么我运行“entirerow.delete”3次。 这就是我现在拥有的。

  • 本文向大家介绍在Python中删除范围内的元素,包括了在Python中删除范围内的元素的使用技巧和注意事项,需要的朋友参考一下 通过使用元素的索引和del函数,可以直接从python删除单个元素。但是在某些情况下,我们需要删除一组索引的元素。本文探讨了仅删除索引列表中指定的列表中那些元素的方法。 使用排序和删除 在这种方法中,我们创建一个包含必须删除的索引值的列表。我们对它们进行排序和反转以保留列