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

对多维数组/切片进行排序

对多维数组/切片进行排序

Go
呼唤远方 2021-11-22 18:05:05
我在 Go 中创建了一个多维数组(切片),如下所示:var distancematrix [5][5]int所以它是一个 5*5 的数组/切片。现在我将值插入到这个切片中,以便在某一点: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 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

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