如何在Go中从map中删除数据?例如,拥有m:=map[string]string{"key1":"val1","key2":"val2"};我想让m删除“key1”而不通过迭代它的键来复制整个map(这在某些用途中可能会变得很大)。将nil值分配给“key1”是否足够,或者仍然将键保留在映射结构中并分配值为nil?也就是说,如果我以后遍历map的键,会出现“key1”吗? 最佳答案 DeletionofmapelementsThebuilt-infunctiondeleteremovestheelementwithkeykfrom
我是Go新手,现在我想从map中获取任意项目;这样做的惯用方法是什么?我只能想到这样的事情:funcget_some_key(mmap[int]int)int{fork:=rangem{returnk}return0}我想要这样做的原因是我正在使用map来维护一组作业,并且使用map我可以获得待处理的作业或在O(1)中删除已完成的作业。我想这应该是一个常见的要求,但在Go中如何做到这一点并不明显。 最佳答案 可以讨论从哈希表中获取任意键是否是常见要求。其他语言映射实现通常缺少此功能(例如。DictionaryinC#)但是,您的解决
我有一个递归函数,它创建表示文件路径的对象(键是路径,值是有关文件的信息)。它是递归的,因为它只用于处理文件,所以如果遇到目录,就会在目录上递归调用该函数。话虽如此,我想在两个map上做一个集合并集(即用递归调用的值更新的“主”map)。除了迭代一个map并将其中的每个键、值分配给另一个map中的相同事物之外,是否有一种惯用的方法来做到这一点?即:给定a,b的类型是map[string]*SomeObject,并且a和b最终被填充,有没有办法用b中的所有值更新a? 最佳答案 没有内置方法,标准包中也没有任何方法可以进行这种合并。惯用
我正在尝试将map(amap)的内容复制到另一个map(aSuperMap)中,然后清除amap以便它可以在下一次迭代/循环中采用新值。问题是你无法清除mapwithouttoclearitsreference在supermap中也是如此。这是一些伪代码。forsomething:=rangefruits{aMap:=make(map[string]aStruct)aSuperMap:=make(map[string]map[string]aStruct)forx:=rangesomething{aMap[x]=aDataaSuperMap[y]=aMapdelete(aMap,x)}
给定vardst,srcmap[K]V我可以通过这样做将所有条目从src复制到dstfork,v:=rangesrc{dst[k]=v}有没有更惯用的方法来做到这一点?copy仅适用于slice(以及string作为源)。 最佳答案 这对我来说似乎是一个非常好的方法。我认为将一张map复制到另一张map并不常见到有一个单一的解决方案。 关于dictionary-将map的所有元素复制到另一个map中,我们在StackOverflow上找到一个类似的问题: ht
如果我有一张mapm,有没有比这更好的方法来获取值v的一部分?packagemainimport("fmt")funcmain(){m:=make(map[int]string)m[1]="a"m[2]="b"m[3]="c"m[4]="d"//Canthisbedonebetter?v:=make([]string,len(m),len(m))idx:=0for_,value:=rangem{v[idx]=valueidx++}fmt.Println(v)}map有内置功能吗?Go包中是否有函数,或者这是唯一的方法? 最佳答案 作
如何从map中删除选定的键?将delete()与range结合是否安全,如下面的代码所示?packagemainimport"fmt"typeInfostruct{valuestring}funcmain(){table:=make(map[string]*Info)fori:=0;i%v\n",key,value.value)delete(table,key)}}https://play.golang.org/p/u1vufvEjSw 最佳答案 这是安全的!您还可以在EffectiveGo中找到类似的示例:forkey:=rang
我有一张map:varsessions=map[string]chanint{}如何删除sessions[key]?我试过了:sessions[key]=nil,false;那没用。更新(2011年11月):删除映射条目的特殊语法在Goversion1中被删除:Go1willremovethespecialmapassignmentandintroduceanewbuilt-infunction,delete:delete(m,x)willdeletethemapentryretrievedbytheexpressionm[x].... 最佳答案
我知道我可以用m迭代mapfork,v:=rangem{...}并寻找一个键,但是有没有更有效的方法来测试一个键在map中的存在? 最佳答案 一行答案:ifval,ok:=dict["foo"];ok{//dosomethinghere}说明:Go中的if语句可以包含条件语句和初始化语句。上面的示例同时使用了这两种方法:初始化两个变量-val将从映射中接收“foo”的值或“零值”(在本例中为空字符串)和ok将收到一个bool值,如果map中实际存在“foo”,则该bool值将设置为true评估ok,如果"foo"在map中,则为tr
如何使用Swift将一个Dictionary附加到另一个Dictionary?我正在使用AlamoFire库将JSON内容发送到REST服务器。字典1vardict1:[String:AnyObject]=[kFacebook:[kToken:token]]字典2vardict2:[String:AnyObject]=[kRequest:[kTargetUserId:userId]]如何将两个字典组合成一个新字典,如下所示?letparameters:[String:AnyObject]=[kFacebook:[kToken:token],kRequest:[kTargetUserId