为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 []int 转换为 [2]int?

如何将 []int 转换为 [2]int?

Go
慕无忌1623718 2022-05-18 16:16:07
我有返回 [2]int 的函数。我有 slice ages[len(ages)-2:]。如何将此切片转换为 [2]int。package mainimport (    "fmt"    "sort")func TwoOldestAges(ages []int) [2]int {    sort.Ints(ages)    return ages[len(ages)-2:]}
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

我会做类似下面的事情;


func TwoOldestAges(ages []int) (oldest [2]int) {

    sort.Sort(sort.Reverse(sort.IntSlice(ages)))

    copy(oldest[:], ages)

    return

}

这里的工作示例


我为返回参数添加了一个名称,这样您就不必指定您在函数中创建的数组大小。由于数组的最大大小为 2,因此副本只会将前两个结果放入数组中。因此,我们对您的年龄进行排序(按升序排序),然后将其反转,以便两个最高的结果是前两个键。


现在,如果您愿意,您可以更新要返回的数组的大小,而无需更新方法内的任何内容。


编辑: 我可能还应该提到这也可以保护您免受超出范围的索引的恐慌。例如,如果你只通过一个长度/容量为1的切片,如果你依赖,ages[:-2]你很可能会遇到越界恐慌:


恐慌:运行时错误:切片超出范围 [:2] 容量为 1


查看完整回答
反对 回复 2022-05-18
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

我是新手,我猜你可以创建一个固定大小为2的数组,然后将切片的前两个值复制到数组中


s := []int{1, 2, 3} 

var twoElements [2]int

//copy the first two values of slice into the entirety of the array

copy(twoElements[:],s[:2]) //copy returns an int of the elements copied

从去文档:


复制内置函数将元素从源切片复制到目标切片。(作为一种特殊情况,它还将字节从字符串复制到字节片。)源和目标可能重叠。Copy 返回复制的元素数量,它将是 len(src) 和 len(dst) 的最小值。



查看完整回答
反对 回复 2022-05-18
?
慕容3067478

TA贡献1773条经验 获得超3个赞

Go 旨在鼓励高效的代码。由于排序,您的算法是 O(n log n)。更好的算法是 O(n)。


例如,O(n),


package main


import (

    "fmt"

)


func TwoOldestAges(ages []int) [2]int {

    var old [2]int

    for _, age := range ages {

        if old[0] < age {

            old[1] = old[0]

            old[0] = age

        } else if old[1] < age {

            old[1] = age

        }

    }

    return old

}


func main() {

    ages := []int{1, 99, 42, 7, 66, 77}

    fmt.Println(ages)

    oldest := TwoOldestAges(ages)

    fmt.Println(oldest)

    ages = []int{1, 77, 42, 7, 66, 99}

    fmt.Println(ages)

    oldest = TwoOldestAges(ages)

    fmt.Println(oldest)

}

游乐场: https: //play.golang.org/p/rq4SMS3MRqY


输出:


[1 99 42 7 66 77]

[99 77]

[1 77 42 7 66 99]

[99 77]


查看完整回答
反对 回复 2022-05-18
  • 3 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信