我有一个简单的问题。我对golang很新。说我有这样的地图:
dockerd
我怎样才能将它随机分成两个地图或数组并尽可能接近均匀?因此,例如,如果有15个项目,它将被拆分为7 - 8。
答案 0 :(得分:2)
例如:
func split(m map[int]string) (odds map[int]string, evens map[int]string) {
n := 1
odds = make(map[int]string)
evens = make(map[int]string)
for key, value := range m {
if n % 2 == 0 {
evens[key] = value
} else {
odds[key] = value
}
n++
}
return odds, evens
}
这实际上是一个有趣的例子,因为它显示了Go的一些方面对初学者来说并不明显:
range m
以随机顺序迭代,据我所知,与其他语言不同,%
返回整数除法的余数答案 1 :(得分:2)
你可以这样做:
myStrings := make(map[int]string)
// Values are added to myStrings
myStrings2 := make(map[int]string)
// Seed system time for random numbers
rand.Seed(time.Now().UTC().UnixNano())
for k, v := range myStrings {
if rand.Float32() < 0.5 {
myStrings2[k] = v
delete(myStrings, k)
}
}