【问题标题】:How can I cast from []interface{} to []int? [duplicate]如何从 []interface{} 转换为 []int? [复制]
【发布时间】:2016-03-31 01:14:57
【问题描述】:

我想获得非重复的 []int。 我正在使用set,但我不知道如何从set 获取[]int。 我该怎么做?

package main

import (
    "fmt"
    "math/rand"
    "time"

    "github.com/deckarep/golang-set"
)

func pickup(max int, num int) []int {
    set := mapset.NewSet()

    rand.Seed(time.Now().UnixNano())
    for set.Cardinality() < num {
        n := rand.Intn(max)
        set.Add(n)
    }
    selected := set.ToSlice()
    // Do I need to cast from []interface{} to []int around here?
    // selected.([]int) is error.
    return selected
}

func main() {
    results := pickup(100, 10)
    fmt.Println(results)
    // some processing using []int...
}

【问题讨论】:

标签: go


【解决方案1】:

没有自动的方法可以做到这一点。您需要创建一个 int 切片并复制到其中:

selected := set.ToSlice()

// create a secondary slice of ints, same length as selected
ret := make([]int, len(selected))

// copy one by one
for i, x := range selected {
   ret[i] = x.(int) //provided it's indeed int. you can add a check here
}

return ret

【讨论】:

  • 哦,我明白了。我必须做一个新的切片。谢谢你的建议。我学到了很多。
猜你喜欢
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 2014-12-30
  • 2013-11-26
  • 2015-10-07
相关资源
最近更新 更多