3 回答
TA贡献1946条经验 获得超4个赞
在你的情况下,strconv.ParseUint你有价值uint64,所以最好有切片,[]uint64而不是[]interface{}因为它更容易排序。
所以你可以做这样的事情:
func createtraffic(tags []Tags) interface{} {
IDs := make([]uint64, len(tags))
for i := range tags {
id, err := strconv.ParseUint(tags[i]["id"], 10, 64)
if err != nil {
continue
}
IDs[i] = id
}
sort.Slice(IDs, func(i, j int) bool { return IDs[i] < IDs[j] })
return IDs
}
如果您仍然需要[]interface{},您可以执行以下操作:
func createtraffic(tags []Tags) []interface{} {
IDs := make([]interface{}, len(tags))
for i := range tags {
id, err := strconv.ParseUint(tags[i]["id"], 10, 64)
if err != nil {
continue
}
IDs[i] = id
}
sort.Slice(IDs, func(i, j int) bool { return IDs[i].(uint64) < IDs[j].(uint64) })
return IDs
}
PS:这里我刚刚添加sort.Slice和更新了IDs类型。
因为这个关于排序的问题,我没有改变任何其他东西,但是有改进的余地(循环,返回类型,......),这超出了这个问题的范围。
TA贡献1805条经验 获得超9个赞
看看这篇文章https://golang.org/pkg/sort/。基于键排序的示例听起来是您尝试对切片执行的操作。然后调用排序的键类型,您将拥有由 Sort() 调用的 Less、Swap 和 Len 函数。这允许您按特定键排序。
- 3 回答
- 0 关注
- 291 浏览
添加回答
举报
