猿问

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

我有返回 [2]int 的函数。我有 slice ages[len(ages)-2:]。如何将此切片转换为 [2]int。


package main


import (

    "fmt"

    "sort"

)


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

    sort.Ints(ages)

    return ages[len(ages)-2:]

}


慕无忌1623718
浏览 125回答 3
3回答

ITMISS

我会做类似下面的事情;func TwoOldestAges(ages []int) (oldest [2]int) {    sort.Sort(sort.Reverse(sort.IntSlice(ages)))    copy(oldest[:], ages)    return}这里的工作示例我为返回参数添加了一个名称,这样您就不必指定您在函数中创建的数组大小。由于数组的最大大小为 2,因此副本只会将前两个结果放入数组中。因此,我们对您的年龄进行排序(按升序排序),然后将其反转,以便两个最高的结果是前两个键。现在,如果您愿意,您可以更新要返回的数组的大小,而无需更新方法内的任何内容。编辑: 我可能还应该提到这也可以保护您免受超出范围的索引的恐慌。例如,如果你只通过一个长度/容量为1的切片,如果你依赖,ages[:-2]你很可能会遇到越界恐慌:恐慌:运行时错误:切片超出范围 [:2] 容量为 1

慕尼黑5688855

我是新手,我猜你可以创建一个固定大小为2的数组,然后将切片的前两个值复制到数组中s := []int{1, 2, 3} var twoElements [2]int//copy the first two values of slice into the entirety of the arraycopy(twoElements[:],s[:2]) //copy returns an int of the elements copied从去文档:复制内置函数将元素从源切片复制到目标切片。(作为一种特殊情况,它还将字节从字符串复制到字节片。)源和目标可能重叠。Copy 返回复制的元素数量,它将是 len(src) 和 len(dst) 的最小值。

慕容3067478

Go 旨在鼓励高效的代码。由于排序,您的算法是 O(n log n)。更好的算法是 O(n)。例如,O(n),package mainimport (&nbsp; &nbsp; "fmt")func TwoOldestAges(ages []int) [2]int {&nbsp; &nbsp; var old [2]int&nbsp; &nbsp; for _, age := range ages {&nbsp; &nbsp; &nbsp; &nbsp; if old[0] < age {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; old[1] = old[0]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; old[0] = age&nbsp; &nbsp; &nbsp; &nbsp; } else if old[1] < age {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; old[1] = age&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return old}func main() {&nbsp; &nbsp; ages := []int{1, 99, 42, 7, 66, 77}&nbsp; &nbsp; fmt.Println(ages)&nbsp; &nbsp; oldest := TwoOldestAges(ages)&nbsp; &nbsp; fmt.Println(oldest)&nbsp; &nbsp; ages = []int{1, 77, 42, 7, 66, 99}&nbsp; &nbsp; fmt.Println(ages)&nbsp; &nbsp; oldest = TwoOldestAges(ages)&nbsp; &nbsp; 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]
随时随地看视频慕课网APP

相关分类

Go
我要回答