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

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

對多維數組/切片進行排序

對多維數組/切片進行排序

Go
呼喚遠方 2021-11-22 18:05:05
我在 Go 中創建了一個多維數組(切片),如下所示:var distancematrix [5][5]int所以它是一個 5*5 的數組/切片?,F在我將值插入到這個切片中,以便在某一點:distancematrix :  [[0 154 12 35 138] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]現在,我想按升序對這個數組進行排序,例如:sorteddistancematrix :  [[0 12 35  138 154] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]我試過了,sort.Ints(distancematrix[0])但它拋出一個錯誤說:cannot use distancematrix[0] (type [5]int) as type []int in argument to sort.Ints基本上,我想獲取數組中最小的非零值。我怎樣才能對這個數組進行排序來實現這一點?
查看完整描述

2 回答

?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

要獲得最小的非零元素,您不需要對其進行排序。與僅獲取最小的非零元素相比,對數組或切片進行排序是一項相對昂貴的操作。


通常要獲得最小的非零元素,只需遍歷這些值,然后尋找最適合您的值。如果您找到更好的(在您的示例中為較小的非零),請保留并繼續。


示例實現:


func smallestNonZero(s []int) (n int) {

    for _, v := range s {

        if v != 0 && (v < n || n == 0) {

            n = v

        }

    }

    return

}

注意:0當且僅當傳遞的切片不包含任何非零元素(即,它要么充滿0s ,要么為空,要么為 )時,該函數才會返回nil。如果切片(也)包含負數,此函數也能正常工作。


如果您有一個數組而不是一個切片,只需將數組切片(這會產生一個切片),這樣您就可以將其傳遞給上面的函數。


使用它:


fmt.Println(smallestNonZero([]int{5, 3, 1, 4}))

fmt.Println(smallestNonZero([]int{0, 3, 5, 8, 0, 2, 9}))

arr := [5]int{0, 154, 12, 35, 138}

fmt.Println(smallestNonZero(arr[:]))

輸出(在Go Playground上試試):


1

2

12


查看完整回答
反對 回復 2021-11-22
?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

Go 編程語言規范


切片表達式


切片表達式從字符串、數組、指向數組的指針或切片構造子字符串或切片。有兩種變體:一種是指定上下限的簡單形式,另一種是同時指定容量范圍的完整形式。


簡單的切片表達式


對于字符串、數組、指向數組的指針或切片 a,主要表達式


a[low : high]

構造一個子串或切片。索引 low 和 high 選擇操作數 a 的哪些元素出現在結果中。結果的索引從 0 開始,長度等于高 - 低。對數組進行切片后


a := [5]int{1, 2, 3, 4, 5}

s := a[1:4]

切片 s 的類型為 []int,長度為 3,容量為 4 和元素


s[0] == 2

s[1] == 3

s[2] == 4

為方便起見,可以省略任何索引。缺失的低指數默認為零;缺少的高索引默認為切片操作數的長度:


a[2:]  // same as a[2 : len(a)]

a[:3]  // same as a[0 : 3]

a[:]   // same as a[0 : len(a)]

如果 a 是指向數組的指針,則 a[low : high] 是 (*a)[low : high] 的簡寫。


要將 type 轉換[5]int為 type []int,請對數組進行切片。例如,


package main


import "sort"


func main() {

    var distancematrix [5][5]int

    sort.Ints(distancematrix[0][:])

}


查看完整回答
反對 回復 2021-11-22
  • 2 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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