如何在Go中随机分割地图?

时间:2017-03-23 11:45:44

标签: dictionary go

我有一个简单的问题。我对golang很新。说我有这样的地图:

dockerd

我怎样才能将它随机分成两个地图或数组并尽可能接近均匀?因此,例如,如果有15个项目,它将被拆分为7 - 8。

2 个答案:

答案 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)

    }
}

https://play.golang.org/p/6OnH1k4FMu