亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 []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 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號